diff options
author | Matt Fleming <matt.fleming@intel.com> | 2012-03-13 12:23:56 +0000 |
---|---|---|
committer | Matt Fleming <matt.fleming@intel.com> | 2012-03-23 16:56:16 +0000 |
commit | cb05ff3e5a6aef2d1da2e4397b08e7eedde8c077 (patch) | |
tree | a6ccab00e2cc9e5838ca325164a873fcb52c633c | |
parent | 0105cae269ed2488a2a99f1548740ca99326cc4a (diff) | |
download | syslinux-cb05ff3e5a6aef2d1da2e4397b08e7eedde8c077.tar.gz syslinux-cb05ff3e5a6aef2d1da2e4397b08e7eedde8c077.tar.xz syslinux-cb05ff3e5a6aef2d1da2e4397b08e7eedde8c077.zip |
core: Abstract search_config() into search_dirs()
The core currently abuses search_config() in order to locate
ldlinux.c32. The problem with this is that search_config() updates
ConfigName with the realpath of the file on every invocation. If we've
previously set ConfigName search_config() will overwrite this value.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
-rw-r--r-- | core/elflink/load_env32.c | 5 | ||||
-rw-r--r-- | core/fs/iso9660/iso9660.c | 2 | ||||
-rw-r--r-- | core/fs/lib/loadconfig.c | 2 | ||||
-rw-r--r-- | core/fs/lib/searchconfig.c | 18 | ||||
-rw-r--r-- | core/include/fs.h | 5 |
5 files changed, 17 insertions, 15 deletions
diff --git a/core/elflink/load_env32.c b/core/elflink/load_env32.c index 2dd4a7bc..28bc70c1 100644 --- a/core/elflink/load_env32.c +++ b/core/elflink/load_env32.c @@ -121,6 +121,7 @@ void load_env32(com32sys_t * regs) struct file_info *fp; int fd; char *argv[] = { LDLINUX, NULL }; + char *realname; static const char *search_directories[] = { "/boot/isolinux", @@ -155,7 +156,7 @@ void load_env32(com32sys_t * regs) /* * If we failed to load LDLINUX it could be because our * current working directory isn't the install directory. Try - * a bit harder to find LDLINUX. If search_config() succeeds + * a bit harder to find LDLINUX. If search_dirs() succeeds * in finding LDLINUX it will set the cwd. */ fd = opendev(&__file_dev, NULL, O_RDONLY); @@ -164,7 +165,7 @@ void load_env32(com32sys_t * regs) fp = &__file_info[fd]; - if (!search_config(&fp->i.fd, search_directories, filenames)) + if (!search_dirs(&fp->i.fd, search_directories, filenames, realname)) start_ldlinux(argv); } diff --git a/core/fs/iso9660/iso9660.c b/core/fs/iso9660/iso9660.c index 792cd99f..fe58a5b3 100644 --- a/core/fs/iso9660/iso9660.c +++ b/core/fs/iso9660/iso9660.c @@ -243,7 +243,7 @@ static int iso_open_config(struct com32_filedata *filedata) NULL }; - return search_config(filedata, search_directories, filenames); + return search_dirs(filedata, search_directories, filenames, ConfigName); } static int iso_fs_init(struct fs_info *fs) diff --git a/core/fs/lib/loadconfig.c b/core/fs/lib/loadconfig.c index 100500c5..95e6f3f8 100644 --- a/core/fs/lib/loadconfig.c +++ b/core/fs/lib/loadconfig.c @@ -30,5 +30,5 @@ int generic_open_config(struct com32_filedata *filedata) dprintf("CurrentDirName: \"%s\"\n", CurrentDirName); - return search_config(filedata, search_directories, filenames); + return search_dirs(filedata, search_directories, filenames, ConfigName); } diff --git a/core/fs/lib/searchconfig.c b/core/fs/lib/searchconfig.c index f688e7f2..f7cfeac7 100644 --- a/core/fs/lib/searchconfig.c +++ b/core/fs/lib/searchconfig.c @@ -8,28 +8,28 @@ char ConfigName[FILENAME_MAX]; char config_cwd[FILENAME_MAX]; /* - * Common implementation of load_config - * * This searches for a specified set of filenames in a specified set * of directories. If found, set the current working directory to * match. */ -int search_config(struct com32_filedata *filedata, - const char *search_directories[], const char *filenames[]) +int search_dirs(struct com32_filedata *filedata, + const char *search_directories[], + const char *filenames[], + char *realname) { - char confignamebuf[FILENAME_MAX]; + char namebuf[FILENAME_MAX]; const char *sd, **sdp; const char *sf, **sfp; for (sdp = search_directories; (sd = *sdp); sdp++) { for (sfp = filenames; (sf = *sfp); sfp++) { - snprintf(confignamebuf, sizeof confignamebuf, + snprintf(namebuf, sizeof namebuf, "%s%s%s", sd, (*sd && sd[strlen(sd)-1] == '/') ? "" : "/", sf); - realpath(ConfigName, confignamebuf, FILENAME_MAX); - dprintf("Config search: %s\n", ConfigName); - if (open_file(ConfigName, filedata) >= 0) { + realpath(realname, namebuf, FILENAME_MAX); + dprintf("Directory search: %s\n", realname); + if (open_file(realname, filedata) >= 0) { chdir(sd); return 0; /* Got it */ } diff --git a/core/include/fs.h b/core/include/fs.h index fd8e4834..93eb8180 100644 --- a/core/include/fs.h +++ b/core/include/fs.h @@ -218,8 +218,9 @@ int generic_chdir_start(void); void generic_mangle_name(char *, const char *); /* loadconfig.c */ -int search_config(struct com32_filedata *filedata, - const char *search_directores[], const char *filenames[]); +int search_dirs(struct com32_filedata *filedata, + const char *search_directores[], const char *filenames[], + char *realname); int generic_open_config(struct com32_filedata *filedata); /* close.c */ |