diff options
authorMatt Fleming <matt.fleming@intel.com>2013-01-16 11:14:59 +0000
committerMatt Fleming <matt.fleming@intel.com>2013-01-16 12:22:42 +0000
commitd5e63aca6de51f9a70e9f78e2cc5ee3d32a18614 (patch)
parent8deea7fccbf76bca2ec62057afc774540da1603e (diff)
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>
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;