[syslinux] config_cwd can be killed?

Ady Ady ady-sf at hotmail.com
Sun Mar 5 19:51:07 PST 2017


> I asked before about config_cwd and after some more digging, it looks
> like it could be removed...
> 
> Specifically, the documentation
> http://www.syslinux.org/wiki/index.php?title=Config#CONFIG says:
> 
> ----------
> * CONFIG config_file [new_WD]
> 
> Load a new configuration file. The new configuration file is read, the
> Working Directory is optionally changed (if specified via an optional
> second parameter), and then the new configuration file is parsed.
> 
> If new_WD is not specified, then the Current Working Directory is
> maintained, unchanged.
> 
> The Working Directory may be different from the path to the config file.
> ----------
> 
> But looking at the actual code, it doesn't *read* so much as just
> *open* the config file.
> 
> So presumably, the open() implementations (by filesystem type?) would
> look for the config file with a relative filename in the old current
> directory and not the new current directory.
> 
> Is that a useful or necessary feature?
> 
> Is Matt Fleming (author of the original code) still lurking on this
> list to explain?
> 
> Or could IMAGE_TYPE_CONFIG set the directory before processing the config file.
 
 
The CONFIG directive first changes the CWD and then it parses the new 
cfg file; or at least it is supposed to.

For network setups, I would humbly suggest avoiding absolute paths, and 
using [MENU] INCLUDE (instead of CONFIG) whenever possible.

FWIW, years ago (circa 2012-2014) I tested the CONFIG directive with 
many, many variations using ISOLINUX and SYSLINUX in several versions 
(4.05+, 5+,6+). Several improvements were introduced back then.

If the CONFIG directive fails (now, or in the future) in SYSLINUX or in 
ISOLINUX, I hope someone else will step up for testing.
 
 
> 
> Both menu.c32 and ldlinux.EXT have parse_configs() functions that they
> send the argc/argv list they receive.  Both functions handle multiple
> arguments as multiple config files to be processed (with either
> parse_one_config() or parse_main_config()).  The documentation
> (http://www.syslinux.org/wiki/index.php?title=Menu#Alternative_configuration_file)
> shows examples of this for the menu.c32 case.
> 
> But this highlights that we have two different config file parsers
> with different behavior.  I haven't looked closely to completely
> confirm but, menu.c32 probably doesn't handle INCLUDE directives and
> LDLINUX doesn't support the "~" shorthand for config file names.
 
 
There are several parsers: CLI, [vesa]menu.c32, GFX, the Complex Menu 
System, and there are external parsers too.

About "[MENU] INCLUDE", see first:
 http://www.syslinux.org/wiki/index.php/Config#INCLUDE 
read it and then follow the "see also" link to "Menu#INCLUDE".

Although I wish for the CLI parser to support "~" too, I would not be 
surprised if it doesn't, even in older versions -- I haven't tested it 
in years. If I were to express wishes / priorities, I would rather see 
the long-time regressions being fixed (e.g. LSS16 background; updating 
dependencies such as lwip, gnu-efi, png...; dealing with pending 
patches...; booting optical media in UEFI mode and so on). There is a 
reason for so many Linux distros still using Syslinux 4.xx and older, 
instead of updating. Of course, it is easy to just wish and hope.
 
 
> 
> What about if the CONFIG (LDLINUX)  and MENU.c32 (and gfxboot.c32?)
> modules looked for arguments like "cwd=path/to/dir" (cwd relative and
> possibly including .. to drop parent directories?) or
> "cwd=/abs/path/to/dir" to change directories at that point in the
> parsing of the config files.  (Similar to the way initrd=filename is
> special for KERNEL types)  Then we wouldn't need this config_cwd
> private buffer and we could delete it and save some bytes of memory
> and simplify code.
> 
> Phil P.
> 
 
Regards,
Ady.



More information about the Syslinux mailing list