diff options
Diffstat (limited to 'ldlinux.asm')
| -rw-r--r-- | ldlinux.asm | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/ldlinux.asm b/ldlinux.asm index 4df94b73..b12403eb 100644 --- a/ldlinux.asm +++ b/ldlinux.asm @@ -1034,7 +1034,8 @@ search_dos_dir: close_file: and si,si jz .closed - mov dword [si],0 ; First dword == file_left + mov dword [si],0 ; First dword == file_sector + xor si,si .closed: ret ; @@ -1092,6 +1093,11 @@ searchdir: ; SI and EAX are already set mov [si+file_bytesleft],eax + push eax + add eax,SECTOR_SIZE-1 + shr eax,SECTOR_SHIFT + mov [si+file_left],eax ; Sectors left + pop eax and eax,eax ; EAX != 0 jz .badfile ret ; Done! @@ -1361,14 +1367,18 @@ getfssec: call getfssec_edx mov [si+file_sector],edx pop ecx ; Sectors requested read - pushf ; Save CF from getfssec_edx shl ecx,SECTOR_SHIFT cmp ecx,[si+file_bytesleft] - jna .noteof + ja .eof +.noteof: + sub [si+file_bytesleft],ecx ; CF <- 0 + pop edx + ret +.eof: mov ecx,[si+file_bytesleft] -.noteof: sub ecx,[si+file_bytesleft] - popf + call close_file pop edx + stc ret ; |
