diff options
authorhpa <hpa>2002-10-24 17:31:45 +0000
committerhpa <hpa>2002-10-24 17:31:45 +0000
commit816932ec84dbea9dc1f212a6ac749d077689febc (patch)
parentd684e72385132bd87e46e5a8fdf591da9ee8ba2c (diff)
(Hopefully) fix bug related to very long configuration filessyslinux-2.00-pre12
ISOLINUX: support /boot/isolinux as well as /isolinux
5 files changed, 35 insertions, 13 deletions
diff --git a/NEWS b/NEWS
index 5f6f2225..268da061 100644
--- a/NEWS
+++ b/NEWS
@@ -20,6 +20,9 @@ Changes in 2.00:
* Add a small script, mkdiskimage, to create a DOS-formatted
hard disk image using mtools. This may be useful in
conjunction with MEMDISK.
+ * ISOLINUX: Search for a /boot/isolinux directory as well as
+ /isolinux.
+ * ALL: Fix a bug related to very long configuration files.
Changes in 1.76:
* ISOLINUX: Remove code no longer used which caused hangs on
diff --git a/getc.inc b/getc.inc
index 5a807ebd..188bea69 100644
--- a/getc.inc
+++ b/getc.inc
@@ -52,8 +52,8 @@ open_return: ret
stc ; If we exit here -> EOF
- mov ecx,[FBytes]
- jecxz getc_ret
+ cmp dword [FBytes],byte 0
+ je getc_ret
mov si,[FPtr]
cmp si,[EndOfGetCBuf]
jb getc_loaded
@@ -73,7 +73,7 @@ getc_oksize: sub [FClust],cx ; Reduce remaining clusters
mov [FNextClust],si ; Store new next pointer
pop si ; SI -> newly loaded data
pop es ; Restore ES
-getc_loaded: lodsb ; Load a byte
+getc_loaded: lodsb ; Load a byte, increment SI
mov [FPtr],si ; Update next byte pointer
dec dword [FBytes] ; Update bytes left counter
clc ; Not EOF
diff --git a/isolinux.asm b/isolinux.asm
index 9e41add4..71f1c58d 100644
--- a/isolinux.asm
+++ b/isolinux.asm
@@ -796,13 +796,18 @@ get_fs_structures:
mov [RootDir+dir_clust],eax
mov [CurDir+dir_clust],eax
- ; Look for an "isolinux" directory, and if found,
+ ; Look for an isolinux directory, and if found,
; make it the current directory instead of the root
; directory.
+ mov di,boot_dir ; Search for /boot/isolinux
+ mov al,02h
+ call searchdir_iso
+ jnz .found_dir
mov di,isolinux_dir
- mov al,02h ; Search for a directory
+ mov al,02h ; Search for /isolinux
call searchdir_iso
jz .no_isolinux_dir
mov [CurDir+dir_len],eax
mov eax,[si+file_left]
mov [CurDir+dir_clust],eax
@@ -1525,6 +1530,7 @@ aborted_msg db ' aborted.', CR, LF, 0
crff_msg db CR, FF, 0
default_str db 'default', 0
default_len equ ($-default_str)
+boot_dir db '/boot' ; /boot/isolinux
isolinux_dir db '/isolinux', 0
isolinux_cfg db 'isolinux.cfg', 0
err_disk_image db 'Cannot load disk image (invalid file)?', CR, LF, 0
diff --git a/isolinux.doc b/isolinux.doc
index cc724808..502162d5 100644
--- a/isolinux.doc
+++ b/isolinux.doc
@@ -2,7 +2,7 @@
A bootloader for Linux using ISO 9660/El Torito CD-ROMs
- Copyright (C) 1994-2001 H. Peter Anvin
+ Copyright (C) 1994-2002 H. Peter Anvin
This program is provided under the terms of the GNU General Public
License, version 2 or, at your option, any later version. There is no
@@ -23,19 +23,22 @@ Make sure you have a recent enough version of mkisofs. I recommend
mkisofs 1.13 (distributed with cdrecord 1.9), but 1.12 might work as
well (not tested.)
-To create an image, create a directory called "isolinux" underneath
-the root directory of your ISO image master file tree. Copy
-isolinux.bin, a config file called "isolinux.cfg" (see syslinux.doc
-for details on the configuration file), and all necessary files
-(kernels, initrd, display files, etc.) into this directory, then use
-the following command to create your ISO image (add additional options
-as appropriate, such as -J or -R):
+To create an image, create a directory called "isolinux" (or, if you
+prefer, "boot/isolinux") underneath the root directory of your ISO
+image master file tree. Copy isolinux.bin, a config file called
+"isolinux.cfg" (see syslinux.doc for details on the configuration
+file), and all necessary files (kernels, initrd, display files, etc.)
+into this directory, then use the following command to create your ISO
+image (add additional options as appropriate, such as -J or -R):
mkisofs -o <isoimage> \
-b isolinux/isolinux.bin -c isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table \
+(If you named the directory boot/isolinux that should of course be
+-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat.)
ISOLINUX resolves pathnames the following way:
- A pathname consists of names separated by slashes, Unix-style.
@@ -65,6 +68,14 @@ I would greatly appreciate if you could try out the debugging version
(isolinux-debug.bin) and let me know what it reports.
+ISOLINUX will search for the config file directory in the order
+/boot/isolinux, /isolinux, /. The first directory that exists is
+used, even if it contains no files. Therefore, please make sure that
+these directories don't exist if you don't want ISOLINUX to use them.
WARNING: This feature depends on BIOS functionality which is
diff --git a/parsecmd.inc b/parsecmd.inc
index 9e69319e..964fbcc3 100644
--- a/parsecmd.inc
+++ b/parsecmd.inc
@@ -39,7 +39,9 @@ getcommand:
or al,20h ; Convert to lower case
movzx ebx,al ; Hash for a one-char keyword
+ push ebx
call getc
+ pop ebx
cmp al,' ' ; Whitespace
jbe .done
or al,20h