450,7 → 450,7 |
mov ebx, [ext2_data.ext2_temp_block] |
call ext2_get_block |
test eax, eax |
jz @F ;если не было ошибки |
jnz @F ;если не было ошибки |
|
mov ecx, [ebx + ecx*4] ;заносим результат |
@@: |
565,7 → 565,7 |
rep movsd |
pop ecx |
@@: |
cmp [ebp + EXT2_INODE_STRUC.i_blocks], 0 ;папка пуста |
cmp [ebp + EXT2_INODE_STRUC.i_size], 0 ;папка пуста |
je .error_empty_dir |
|
push edx ;адрес результата [edi + 28] |
616,6 → 616,7 |
test ebx, 0x3 ; длина записи должна делиться на 4 |
jnz .error_bad_len |
|
sub [ebp + EXT2_INODE_STRUC.i_size], ebx ;вычитаем напрямую из структуры inode |
add esi, ebx ; к следующей записи |
cmp esi, [edi + 24] ; сравниваем с концом блока |
jb .find_wanted_start |
622,8 → 623,7 |
|
push .find_wanted_start |
.end_block: ;вылетели из цикла |
mov ebx, [ext2_data.count_block_in_block] |
sub [ebp + EXT2_INODE_STRUC.i_blocks], ebx ;вычитаем напрямую из структуры inode |
cmp [ebp + EXT2_INODE_STRUC.i_size], 0 |
jle .end_dir |
|
inc dword [edi] ;получаем новый блок |
727,6 → 727,7 |
test ebx, 0x3 ; длина записи должна делиться на 4 |
jnz .error_bad_len |
|
sub [ebp + EXT2_INODE_STRUC.i_size], ebx ;вычитаем напрямую из структуры inode |
add esi, ebx |
cmp esi, [edi + 24] ;дошли ли до конца блока? |
jb .wanted_start |
895,15 → 896,13 |
jae .size_great_great |
|
.size_great_less: |
push 1 |
; or [EXT2_files_in_folder], 1 ;читаем по границе размера |
push 1 ;читаем по границе размера |
mov ecx, [ebp + EXT2_INODE_STRUC.i_size] |
sub ecx, [esi] ;(размер - старт) = сколько читать |
jmp @F |
|
.size_great_great: |
push 0 |
; and [EXT2_files_in_folder], 0 ;читаем столько сколько запросили |
push 0 ;читаем столько сколько запросили |
|
@@: |
;здесь мы точно знаем сколько байт читать - ecx |
919,7 → 918,7 |
mov eax, [esi] |
div [ext2_data.block_size] |
|
push eax ;номер блока запоминаем |
push eax ;счетчик блоков ложим в стек |
|
push ecx |
mov ecx, eax |
949,7 → 948,7 |
|
.zero_start: |
mov eax, ecx |
push 0 ;счетчик блоков |
push 0 ;счетчик блоков ложим в стек |
;теперь в eax кол-во оставшихся байт для чтения |
.calc_blocks_count: |
mov ebx, edi ;чтение блока прям в ->ebx |
982,7 → 981,7 |
inc ecx |
call ext2_get_inode_block |
test eax, eax |
jz .error_at_finish_block |
jnz .error_at_finish_block |
|
mov edi, ebx |
mov eax, ecx |
994,9 → 993,13 |
mov ecx, edx |
mov esi, ebx |
rep movsb ;кусок last блока |
jmp @F |
|
.end_read: |
pop ebx |
pop eax |
pop ecx ;счетчик блоков, который хранился в стеке |
@@: |
pop ebx ;количество считанных байт |
pop eax ; 1 или 0 - достигли ли конца файла |
test eax, eax |
jz @F |
|
1009,7 → 1012,6 |
.only_one_block: |
mov esi, ebx |
rep movsb ;кусок last блока |
pop eax |
jmp .end_read |
|
.error_at_first_block: |
1094,6 → 1096,7 |
push [ebp + EXT2_INODE_STRUC.i_blocks] |
xor ecx, ecx |
.folder_block_cycle: |
push ecx |
call ext2_get_inode_block |
test eax, eax |
jnz .error_get_inode_block |
1106,7 → 1109,7 |
|
push esi |
call ext2_test_block_by_name |
pop edi |
pop edi ecx |
|
cmp edi, esi ;нашли имя? |
je .next_folder_block ;не нашли -> к след. блоку |
1132,11 → 1135,11 |
sub eax, [ext2_data.count_block_in_block] |
jle .not_found |
|
push eax |
inc ecx |
jmp .folder_block_cycle |
|
.not_found: |
pop ebx |
mov eax, ERROR_FILE_NOT_FOUND |
ret |
|
1152,6 → 1155,7 |
|
.error_get_inode_block: |
.error_get_block: |
pop ecx |
.error_get_inode: |
pop ebx |
.error_empty_root: |