diff options
author | H. Peter Anvin <hpa@zytor.com> | 2007-05-22 23:27:46 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2007-05-22 23:27:46 -0700 |
commit | b901a125510486e190dd841dfa616cafff0c9242 (patch) | |
tree | e0fe9893d5f3dc204b72509e70add30d414e2107 | |
parent | 1e7084a905560314d7a30b7826d77783f4d3740e (diff) | |
download | syslinux-b901a125510486e190dd841dfa616cafff0c9242.tar.gz |
Make it safe to call close_file on an already closed file.syslinux-3.50-pre15
The SYSLINUX internal API closes a file automatically upon reading
to block EOF (not necessarily file EOF!) Thus, it's fairly likely
we'll get SI == 0 (closed file) passed to close_file at some point
or another.
Just plain admit it, and make close_file accept SI == 0 by spec.
-rw-r--r-- | comboot.inc | 3 | ||||
-rw-r--r-- | extlinux.asm | 4 | ||||
-rw-r--r-- | getc.inc | 3 | ||||
-rw-r--r-- | isolinux.asm | 4 | ||||
-rw-r--r-- | ldlinux.asm | 4 | ||||
-rw-r--r-- | pxelinux.asm | 4 |
6 files changed, 12 insertions, 10 deletions
diff --git a/comboot.inc b/comboot.inc index 4896e392..034f924c 100644 --- a/comboot.inc +++ b/comboot.inc @@ -434,10 +434,7 @@ comapi_read: ; comapi_close: mov si,P_SI - and si,si - jz .nothing call close_file -.nothing: clc ret diff --git a/extlinux.asm b/extlinux.asm index 7d735073..a590a366 100644 --- a/extlinux.asm +++ b/extlinux.asm @@ -1039,8 +1039,10 @@ ThisInode resb EXT2_GOOD_OLD_INODE_SIZE ; The most recently opened inode ; Assumes CS == DS. ; close_file: + and si,si + jz .closed mov dword [si],0 ; First dword == file_left - ret +.closed: ret ; ; searchdir: @@ -162,9 +162,6 @@ close: push si mov bx,[CurrentGetC] mov si,[bx+gc_file] - and si,si - jz .closed -.closed: call close_file add bx,getc_file_size mov [CurrentGetC],bx diff --git a/isolinux.asm b/isolinux.asm index de4f1646..f9e8741d 100644 --- a/isolinux.asm +++ b/isolinux.asm @@ -1143,8 +1143,10 @@ local_boot: ; Assumes CS == DS. ; close_file: + and si,si + jz .closed mov dword [si],0 ; First dword == file_left - ret +.closed: ret ; ; searchdir: diff --git a/ldlinux.asm b/ldlinux.asm index 7d7b8f23..eed29519 100644 --- a/ldlinux.asm +++ b/ldlinux.asm @@ -1065,8 +1065,10 @@ search_dos_dir: ; Assumes CS == DS. ; close_file: + and si,si + jz .closed mov dword [si],0 ; First dword == file_left - ret +.closed: ret ; ; searchdir: diff --git a/pxelinux.asm b/pxelinux.asm index 253aa0f1..3e50245f 100644 --- a/pxelinux.asm +++ b/pxelinux.asm @@ -1078,8 +1078,10 @@ memory_scan_for_pxenv_struct: ; side and send a courtesy ERROR packet to the server. ; close_file: + and si,si + jz .closed mov word [si],0 ; Not in use - ret +.closed: ret ; ; searchdir: |