ldlinux: CurrentDir not set if syslinux.cfg is missing
authorSebastian Herbszt <herbszt@gmx.de>
Wed, 9 Jul 2008 19:02:39 +0000 (21:02 +0200)
committerH. Peter Anvin <hpa@zytor.com>
Wed, 9 Jul 2008 19:53:53 +0000 (15:53 -0400)
If a syslinux floppy does not contain a config file (syslinux.cfg) modules are
not being found unless specified with a directory prefix (e.g. /pcitest.c32).
The reason is that CurrentDir is only set if there is a config file present. This is a
possible regression since commit 68eefb79e2cbb590ebf958dd0c50ce00b941abd2.
Before this change RootDir was used in searchdir and now it's CurrentDir unless
the filename starts with '/'. Possible fix is to set CurrentDir to RootDir if no config
file is found.

Actually it seems better to move this to the top of the "check for config file" block.
Initialize CurrentDir to RootDir and change it if a config file is found.

- Sebastian

core/ldlinux.asm

index ea42d88..c7f6577 100644 (file)
@@ -901,6 +901,8 @@ getfattype:
                mov di,ConfigName
                call strcpy
 
+               mov eax,[RootDir]       ; Make the root directory ...
+               mov [CurrentDir],eax    ; ... the current directory
                mov di,syslinux_cfg1
                call open
                jnz .config_open