fix ext4 dir blocks count check. fix bug in ext2_find_lfn
git-svn-id: svn://kolibrios.org@3403 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
d21d1d7b9c
commit
c3a49bafc1
@ -565,7 +565,7 @@ ext2_HdReadFolder:
|
|||||||
rep movsd
|
rep movsd
|
||||||
pop ecx
|
pop ecx
|
||||||
@@:
|
@@:
|
||||||
cmp [ebp + EXT2_INODE_STRUC.i_blocks], 0 ;папка пуста
|
cmp [ebp + EXT2_INODE_STRUC.i_size], 0 ;папка пуста
|
||||||
je .error_empty_dir
|
je .error_empty_dir
|
||||||
|
|
||||||
push edx ;адрес результата [edi + 28]
|
push edx ;адрес результата [edi + 28]
|
||||||
@ -616,14 +616,14 @@ ext2_HdReadFolder:
|
|||||||
test ebx, 0x3 ; длина записи должна делиться на 4
|
test ebx, 0x3 ; длина записи должна делиться на 4
|
||||||
jnz .error_bad_len
|
jnz .error_bad_len
|
||||||
|
|
||||||
|
sub [ebp + EXT2_INODE_STRUC.i_size], ebx ;вычитаем напрямую из структуры inode
|
||||||
add esi, ebx ; к следующей записи
|
add esi, ebx ; к следующей записи
|
||||||
cmp esi, [edi + 24] ; сравниваем с концом блока
|
cmp esi, [edi + 24] ; сравниваем с концом блока
|
||||||
jb .find_wanted_start
|
jb .find_wanted_start
|
||||||
|
|
||||||
push .find_wanted_start
|
push .find_wanted_start
|
||||||
.end_block: ;вылетели из цикла
|
.end_block: ;вылетели из цикла
|
||||||
mov ebx, [ext2_data.count_block_in_block]
|
cmp [ebp + EXT2_INODE_STRUC.i_size], 0
|
||||||
sub [ebp + EXT2_INODE_STRUC.i_blocks], ebx ;вычитаем напрямую из структуры inode
|
|
||||||
jle .end_dir
|
jle .end_dir
|
||||||
|
|
||||||
inc dword [edi] ;получаем новый блок
|
inc dword [edi] ;получаем новый блок
|
||||||
@ -727,6 +727,7 @@ ext2_HdReadFolder:
|
|||||||
test ebx, 0x3 ; длина записи должна делиться на 4
|
test ebx, 0x3 ; длина записи должна делиться на 4
|
||||||
jnz .error_bad_len
|
jnz .error_bad_len
|
||||||
|
|
||||||
|
sub [ebp + EXT2_INODE_STRUC.i_size], ebx ;вычитаем напрямую из структуры inode
|
||||||
add esi, ebx
|
add esi, ebx
|
||||||
cmp esi, [edi + 24] ;дошли ли до конца блока?
|
cmp esi, [edi + 24] ;дошли ли до конца блока?
|
||||||
jb .wanted_start
|
jb .wanted_start
|
||||||
@ -1095,6 +1096,7 @@ ext2_find_lfn:
|
|||||||
push [ebp + EXT2_INODE_STRUC.i_blocks]
|
push [ebp + EXT2_INODE_STRUC.i_blocks]
|
||||||
xor ecx, ecx
|
xor ecx, ecx
|
||||||
.folder_block_cycle:
|
.folder_block_cycle:
|
||||||
|
push ecx
|
||||||
call ext2_get_inode_block
|
call ext2_get_inode_block
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jnz .error_get_inode_block
|
jnz .error_get_inode_block
|
||||||
@ -1107,7 +1109,7 @@ ext2_find_lfn:
|
|||||||
|
|
||||||
push esi
|
push esi
|
||||||
call ext2_test_block_by_name
|
call ext2_test_block_by_name
|
||||||
pop edi
|
pop edi ecx
|
||||||
|
|
||||||
cmp edi, esi ;нашли имя?
|
cmp edi, esi ;нашли имя?
|
||||||
je .next_folder_block ;не нашли -> к след. блоку
|
je .next_folder_block ;не нашли -> к след. блоку
|
||||||
@ -1153,6 +1155,7 @@ ext2_find_lfn:
|
|||||||
|
|
||||||
.error_get_inode_block:
|
.error_get_inode_block:
|
||||||
.error_get_block:
|
.error_get_block:
|
||||||
|
pop ecx
|
||||||
.error_get_inode:
|
.error_get_inode:
|
||||||
pop ebx
|
pop ebx
|
||||||
.error_empty_root:
|
.error_empty_root:
|
||||||
|
Loading…
Reference in New Issue
Block a user