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:
turbanoff 2013-03-22 18:35:06 +00:00
parent d21d1d7b9c
commit c3a49bafc1

View File

@ -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: