ext2: fix bug in file read

git-svn-id: svn://kolibrios.org@3313 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
turbanoff 2013-03-03 13:53:24 +00:00
parent e3364a8185
commit 33eee384bf

View File

@ -895,15 +895,13 @@ ext2_HdRead:
jae .size_great_great jae .size_great_great
.size_great_less: .size_great_less:
push 1 push 1 ;читаем по границе размера
; or [EXT2_files_in_folder], 1 ;читаем по границе размера
mov ecx, [ebp + EXT2_INODE_STRUC.i_size] mov ecx, [ebp + EXT2_INODE_STRUC.i_size]
sub ecx, [esi] ;(размер - старт) = сколько читать sub ecx, [esi] ;(размер - старт) = сколько читать
jmp @F jmp @F
.size_great_great: .size_great_great:
push 0 push 0 ;читаем столько сколько запросили
; and [EXT2_files_in_folder], 0 ;читаем столько сколько запросили
@@: @@:
;здесь мы точно знаем сколько байт читать - ecx ;здесь мы точно знаем сколько байт читать - ecx
@ -919,7 +917,7 @@ ext2_HdRead:
mov eax, [esi] mov eax, [esi]
div [ext2_data.block_size] div [ext2_data.block_size]
push eax ;номер блока запоминаем push eax ;счетчик блоков ложим в стек
push ecx push ecx
mov ecx, eax mov ecx, eax
@ -949,7 +947,7 @@ ext2_HdRead:
.zero_start: .zero_start:
mov eax, ecx mov eax, ecx
push 0 ;счетчик блоков push 0 ;счетчик блоков ложим в стек
;теперь в eax кол-во оставшихся байт для чтения ;теперь в eax кол-во оставшихся байт для чтения
.calc_blocks_count: .calc_blocks_count:
mov ebx, edi ;чтение блока прям в ->ebx mov ebx, edi ;чтение блока прям в ->ebx
@ -994,9 +992,13 @@ ext2_HdRead:
mov ecx, edx mov ecx, edx
mov esi, ebx mov esi, ebx
rep movsb ;кусок last блока rep movsb ;кусок last блока
jmp @F
.end_read: .end_read:
pop ebx pop ecx ;счетчик блоков, который хранился в стеке
pop eax @@:
pop ebx ;количество считанных байт
pop eax ; 1 или 0 - достигли ли конца файла
test eax, eax test eax, eax
jz @F jz @F