diff options
author | Matt Fleming <matt.fleming@intel.com> | 2013-01-16 11:14:59 +0000 |
---|---|---|
committer | Matt Fleming <matt.fleming@intel.com> | 2013-01-16 12:22:42 +0000 |
commit | d5e63aca6de51f9a70e9f78e2cc5ee3d32a18614 (patch) | |
tree | 7e6041f83fc43b55abc409203ef048bb89cbbb15 | |
parent | 8deea7fccbf76bca2ec62057afc774540da1603e (diff) | |
download | syslinux-d5e63aca6de51f9a70e9f78e2cc5ee3d32a18614.tar.gz syslinux-d5e63aca6de51f9a70e9f78e2cc5ee3d32a18614.tar.xz syslinux-d5e63aca6de51f9a70e9f78e2cc5ee3d32a18614.zip |
ldlinux: Perform chdir() before parsing configsyslinux-5.01-pre3
The old 4.x behaviour for handling CONFIG directives of the form,
CONFIG foo.cfg /bar
was to lookup the absolute pathname of foo.cfg, then chdir to /bar and
finally to parse foo.cfg. The 5.x behaviour reversed the chdir and
parsing steps. This meant if foo.cfg's contents were simply,
INCLUDE say.txt
4.x would include /bar/say.txt and 5.x would include
/boot/syslinux/say.txt (assuming the current working directory was
/boot/syslinux).
What's even worse is that because of the way 'config_cwd' is used in
5.x we'd actually perform the chdir() operation after the first
INCLUDE in foo.cfg, e.g.
INCLUDE say.txt
INCLUDE say.txt
would include /boot/syslinux/say.txt and /bar/say.txt, respectively.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
-rw-r--r-- | com32/elflink/ldlinux/readconfig.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/com32/elflink/ldlinux/readconfig.c b/com32/elflink/ldlinux/readconfig.c index 156acf57..f4f599f4 100644 --- a/com32/elflink/ldlinux/readconfig.c +++ b/com32/elflink/ldlinux/readconfig.c @@ -1356,15 +1356,15 @@ static int parse_one_config(const char *filename) if (fd < 0) return fd; - f = fdopen(fd, mode); - parse_config_file(f); - if (config_cwd[0]) { if (chdir(config_cwd) < 0) printf("Failed to chdir to %s\n", config_cwd); config_cwd[0] = '\0'; } + f = fdopen(fd, mode); + parse_config_file(f); + return 0; } |