Subversion Repositories Kolibri OS

Rev

Rev 9890 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 9890 Rev 10007
Line 3... Line 3...
3
;; Copyright (C) KolibriOS team 2013-2022. All rights reserved. ;;
3
;; Copyright (C) KolibriOS team 2013-2022. All rights reserved. ;;
4
;;  Distributed under terms of the GNU General Public License   ;;
4
;;  Distributed under terms of the GNU General Public License   ;;
5
;;                                                              ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 7... Line 7...
7
 
7
 
Line 8... Line 8...
8
$Revision: 9890 $
8
$Revision: 10007 $
Line 9... Line 9...
9
 
9
 
Line 178... Line 178...
178
        mov     [edi+XFS.dir_data_magic], XFS_DIR2_DATA_MAGIC
178
        mov     [edi+XFS.dir_data_magic], XFS_DIR2_DATA_MAGIC
179
        mov     [edi+XFS.dir_leaf1_magic], XFS_DIR2_LEAF1_MAGIC
179
        mov     [edi+XFS.dir_leaf1_magic], XFS_DIR2_LEAF1_MAGIC
180
        mov     [edi+XFS.dir_leafn_magic], XFS_DIR2_LEAFN_MAGIC
180
        mov     [edi+XFS.dir_leafn_magic], XFS_DIR2_LEAFN_MAGIC
181
        mov     [edi+XFS.da_node_magic], XFS_DA_NODE_MAGIC
181
        mov     [edi+XFS.da_node_magic], XFS_DA_NODE_MAGIC
182
        mov     [edi+XFS.bmap_magic], XFS_BMAP_MAGIC
182
        mov     [edi+XFS.bmap_magic], XFS_BMAP_MAGIC
-
 
183
        mov     [edi+XFS.dirx_leaf_ents_offset], xfs_dir2_leaf.ents
-
 
184
        mov     [edi+XFS.dirx_leaf_hdr_count_offset], xfs_dir2_leaf_hdr.count
183
        mov     [edi+XFS.dir_block_size], sizeof.xfs_dir2_data_hdr
185
        mov     [edi+XFS.dir_block_size], sizeof.xfs_dir2_data_hdr
184
        mov     [edi+XFS.bmbt_block_size], sizeof.xfs_bmbt_block
186
        mov     [edi+XFS.bmbt_block_size], sizeof.xfs_bmbt_block
185
        mov     [edi+XFS.da_blkinfo_size], sizeof.xfs_da_blkinfo
187
        mov     [edi+XFS.da_blkinfo_size], sizeof.xfs_da_blkinfo
186
        jmp     .vcommon
188
        jmp     .vcommon
187
.v5:
189
.v5:
Line 196... Line 198...
196
        mov     [edi+XFS.dir_data_magic], XFS_DIR3_DATA_MAGIC
198
        mov     [edi+XFS.dir_data_magic], XFS_DIR3_DATA_MAGIC
197
        mov     [edi+XFS.dir_leaf1_magic], XFS_DIR3_LEAF1_MAGIC
199
        mov     [edi+XFS.dir_leaf1_magic], XFS_DIR3_LEAF1_MAGIC
198
        mov     [edi+XFS.dir_leafn_magic], XFS_DIR3_LEAFN_MAGIC
200
        mov     [edi+XFS.dir_leafn_magic], XFS_DIR3_LEAFN_MAGIC
199
        mov     [edi+XFS.da_node_magic], XFS_DA3_NODE_MAGIC
201
        mov     [edi+XFS.da_node_magic], XFS_DA3_NODE_MAGIC
200
        mov     [edi+XFS.bmap_magic], XFS_BMAP3_MAGIC
202
        mov     [edi+XFS.bmap_magic], XFS_BMAP3_MAGIC
-
 
203
        mov     [edi+XFS.dirx_leaf_ents_offset], xfs_dir3_leaf.ents
-
 
204
        mov     [edi+XFS.dirx_leaf_hdr_count_offset], xfs_dir3_leaf_hdr.count
201
        mov     [edi+XFS.dir_block_size], sizeof.xfs_dir3_data_hdr
205
        mov     [edi+XFS.dir_block_size], sizeof.xfs_dir3_data_hdr
202
        mov     [edi+XFS.bmbt_block_size], sizeof.xfs_bmbt3_block
206
        mov     [edi+XFS.bmbt_block_size], sizeof.xfs_bmbt3_block
203
        mov     [edi+XFS.da_blkinfo_size], sizeof.xfs_da3_blkinfo
207
        mov     [edi+XFS.da_blkinfo_size], sizeof.xfs_da3_blkinfo
204
        test    [edi+XFS.features_incompat], XFS_SB_FEAT_INCOMPAT_BIGTIME
208
        test    [edi+XFS.features_incompat], XFS_SB_FEAT_INCOMPAT_BIGTIME
205
        jz      @f      ; no bigtime
209
        jz      @f      ; no bigtime
Line 1010... Line 1014...
1010
proc xfs._.lookup_block uses esi, _name, _len
1014
proc xfs._.lookup_block uses esi, _name, _len
1011
        add     ebx, [ebp+XFS.inode_core_size]
1015
        add     ebx, [ebp+XFS.inode_core_size]
1012
        mov     eax, ebx
1016
        mov     eax, ebx
1013
        mov     ebx, [ebp+XFS.cur_dirblock]
1017
        mov     ebx, [ebp+XFS.cur_dirblock]
1014
        stdcall xfs._.extent_unpack, eax
1018
        stdcall xfs._.extent_unpack, eax
1015
        stdcall xfs._.read_dirblock, [ebp+XFS.extent.br_startblock.lo], [ebp+XFS.extent.br_startblock.hi], ebx
1019
        stdcall xfs._.read_dirblock, [ebp+XFS.extent.br_startblock.lo], \
-
 
1020
                [ebp+XFS.extent.br_startblock.hi], ebx
1016
        jnz     .error
1021
        jnz     .error
1017
        mov     eax, [ebp+XFS.dir_block_magic]
1022
        mov     eax, [ebp+XFS.dir_block_magic]
1018
        cmp     [ebx+xfs_dir2_block.hdr.magic], eax
1023
        cmp     [ebx+xfs_dir2_block.hdr.magic], eax
1019
        movi    eax, ERROR_FS_FAIL
1024
        movi    eax, ERROR_FS_FAIL
1020
        jnz     .error
1025
        jnz     .error
Line 1095... Line 1100...
1095
        mov     eax, [ebp+XFS.dir2_leaf_offset_blocks.lo]
1100
        mov     eax, [ebp+XFS.dir2_leaf_offset_blocks.lo]
1096
        mov     [ebp+XFS.offset_begin.lo], ecx
1101
        mov     [ebp+XFS.offset_begin.lo], ecx
1097
        mov     eax, [ebp+XFS.dir2_leaf_offset_blocks.hi]
1102
        mov     eax, [ebp+XFS.dir2_leaf_offset_blocks.hi]
1098
        mov     [ebp+XFS.offset_begin.hi], ecx
1103
        mov     [ebp+XFS.offset_begin.hi], ecx
1099
        stdcall xfs._.extent_list.seek, ecx
1104
        stdcall xfs._.extent_list.seek, ecx
1100
        stdcall xfs._.read_dirblock, [ebp+XFS.extent.br_startblock.lo], [ebp+XFS.extent.br_startblock.hi], [ebp+XFS.cur_dirblock]
1105
        stdcall xfs._.read_dirblock, [ebp+XFS.extent.br_startblock.lo], \
-
 
1106
                [ebp+XFS.extent.br_startblock.hi], [ebp+XFS.cur_dirblock]
1101
        jnz     .error
1107
        jnz     .error
1102
        mov     ebx, [ebp+XFS.cur_dirblock]
1108
        mov     ebx, [ebp+XFS.cur_dirblock]
1103
        movzx   eax, [ebp+XFS.dir_leaf1_magic]
1109
        movzx   eax, [ebp+XFS.dir_leaf1_magic]
1104
        cmp     [ebx+xfs_dir2_leaf.hdr.info.magic], ax
1110
        cmp     [ebx+xfs_dir2_leaf.hdr.info.magic], ax
1105
        movi    eax, ERROR_FS_FAIL
1111
        movi    eax, ERROR_FS_FAIL
Line 1226... Line 1232...
1226
        sub     ecx, [ebp+XFS.inode_core_size]
1232
        sub     ecx, [ebp+XFS.inode_core_size]
1227
@@:
1233
@@:
1228
        add     ebx, [ebp+XFS.inode_core_size]
1234
        add     ebx, [ebp+XFS.inode_core_size]
1229
        stdcall xfs._.btree_read_block, ebx, ecx, eax, edx, [ebp+XFS.cur_dirblock]
1235
        stdcall xfs._.btree_read_block, ebx, ecx, eax, edx, [ebp+XFS.cur_dirblock]
1230
        mov     ebx, [ebp+XFS.cur_dirblock]
1236
        mov     ebx, [ebp+XFS.cur_dirblock]
-
 
1237
        movzx   eax, [ebp+XFS.da_node_magic]
1231
        cmp     [ebx+xfs_da_intnode.hdr.info.magic], XFS_DA_NODE_MAGIC
1238
        cmp     [ebx+xfs_da_blkinfo.magic], ax
1232
        jz      .next_level
1239
        jz      .next_level
-
 
1240
        movzx   eax, [ebp+XFS.dir_leafn_magic]
1233
        cmp     [ebx+xfs_dir2_leaf.hdr.info.magic], XFS_DIR2_LEAFN_MAGIC
1241
        cmp     [ebx+xfs_da_blkinfo.magic], ax
1234
        jz      .leafn
1242
        jz      .leafn
-
 
1243
        movzx   eax, [ebp+XFS.dir_leaf1_magic]
1235
        cmp     [ebx+xfs_dir2_leaf.hdr.info.magic], XFS_DIR2_LEAF1_MAGIC
1244
        cmp     [ebx+xfs_da_blkinfo.magic], ax
1236
        jnz     .error
1245
        jnz     .error
1237
        mov     eax, [.hash]
1246
        mov     eax, [.hash]
1238
        movzx   ecx, [ebx+xfs_dir2_leaf.hdr.count]
1247
        mov     ecx, [ebp+XFS.dirx_leaf_hdr_count_offset]
-
 
1248
        movzx   ecx, word[ebx+ecx]
1239
        xchg    cl, ch
1249
        xchg    cl, ch
1240
        add     ebx, xfs_dir2_leaf.ents
1250
        add     ebx, [ebp+XFS.dirx_leaf_ents_offset]
1241
        stdcall xfs._.get_addr_by_hash, ebx, ecx
1251
        stdcall xfs._.get_addr_by_hash, ebx, ecx
1242
        jnz     .error
1252
        jnz     .error
1243
        mov     ebx, [ebp+XFS.cur_dirblock]
1253
        mov     ebx, [ebp+XFS.cur_dirblock]
1244
        jmp     .got_addr
1254
        jmp     .got_addr
1245
.leafn:
1255
.leafn:
1246
        movzx   ecx, [ebx+xfs_dir2_leaf.hdr.count]
1256
        mov     ecx, [ebp+XFS.dirx_leaf_hdr_count_offset]
-
 
1257
        movzx   ecx, word[ebx+ecx]
1247
        xchg    cl, ch
1258
        xchg    cl, ch
1248
        add     ebx, xfs_dir2_leaf.ents
1259
        add     ebx, [ebp+XFS.dirx_leaf_ents_offset]
1249
        mov     eax, [.hash]
1260
        mov     eax, [.hash]
1250
        stdcall xfs._.get_addr_by_hash, ebx, ecx
1261
        stdcall xfs._.get_addr_by_hash, ebx, ecx
1251
        jnz     .error
1262
        jnz     .error
1252
        mov     ebx, [ebp+XFS.cur_block]
1263
        mov     ebx, [ebp+XFS.cur_block]
1253
.got_addr:
1264
.got_addr:
Line 2026... Line 2037...
2026
        mov     eax, [_block_lo]
2037
        mov     eax, [_block_lo]
2027
        mov     [ebp+XFS.offset_begin.lo], eax
2038
        mov     [ebp+XFS.offset_begin.lo], eax
2028
        mov     eax, [_block_hi]
2039
        mov     eax, [_block_hi]
2029
        mov     [ebp+XFS.offset_begin.hi], eax
2040
        mov     [ebp+XFS.offset_begin.hi], eax
2030
        stdcall xfs._.extent_list.seek, ecx
2041
        stdcall xfs._.extent_list.seek, ecx
2031
        stdcall xfs._.read_dirblock, [ebp+XFS.extent.br_startblock.lo], [ebp+XFS.extent.br_startblock.hi], [_buf]
2042
        stdcall xfs._.read_dirblock, [ebp+XFS.extent.br_startblock.lo], \
-
 
2043
                [ebp+XFS.extent.br_startblock.hi], [_buf]
2032
.error:
2044
.error:
2033
.quit:
2045
.quit:
2034
        ret
2046
        ret
2035
endp
2047
endp