[syslinux:elflink] pxe: Pass absolute path to pxe_chdir()
syslinux-bot for Matt Fleming
matt.fleming at intel.com
Wed Feb 20 02:21:09 PST 2013
Commit-ID: b208ba467f678ed8e73f8d11fc0609634120cb83
Gitweb: http://www.syslinux.org/commit/b208ba467f678ed8e73f8d11fc0609634120cb83
Author: Matt Fleming <matt.fleming at intel.com>
AuthorDate: Tue, 19 Feb 2013 21:09:55 +0000
Committer: Matt Fleming <matt.fleming at intel.com>
CommitDate: Wed, 20 Feb 2013 10:16:55 +0000
pxe: Pass absolute path to pxe_chdir()
We may have moved out of the root directory when calling get_prefix()
and so need a way to create an absolute path.
Historically, in versions prior to 5.xx we would call
pxe_open_config() while we were still in the root directory ("::"),
and so, we could construct a relative path to the config file.
However, because we need to load ldlinux.c32 before opening the config
file, which may involve us changing directory, we need a way of
constructing an absolute path to the config file in get_prefix().
Signed-off-by: Matt Fleming <matt.fleming at intel.com>
---
core/fs/pxe/pxe.c | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/core/fs/pxe/pxe.c b/core/fs/pxe/pxe.c
index f96c6d0..c07f00e 100644
--- a/core/fs/pxe/pxe.c
+++ b/core/fs/pxe/pxe.c
@@ -984,6 +984,19 @@ err_reply:
}
+static int __pxe_chdir(struct fs_info *fs, const char *src,
+ enum pxe_path_type path_type)
+{
+ if (path_type == PXE_RELATIVE)
+ strlcat(fs->cwd_name, src, sizeof fs->cwd_name);
+ else if (path_type == PXE_HOMESERVER)
+ snprintf(fs->cwd_name, sizeof fs->cwd_name, "::%s", src);
+ else
+ strlcpy(fs->cwd_name, src, sizeof fs->cwd_name);
+ return 0;
+
+}
+
/*
* Store standard filename prefix
*/
@@ -1018,7 +1031,7 @@ static void get_prefix(void)
}
printf("TFTP prefix: %s\n", path_prefix);
- chdir(path_prefix);
+ __pxe_chdir(this_fs, path_prefix, PXE_HOMESERVER);
}
/*
@@ -1041,10 +1054,7 @@ static int pxe_chdir(struct fs_info *fs, const char *src)
/* The cwd for PXE is just a text prefix */
enum pxe_path_type path_type = pxe_path_type(src);
- if (path_type == PXE_RELATIVE)
- strlcat(fs->cwd_name, src, sizeof fs->cwd_name);
- else
- strlcpy(fs->cwd_name, src, sizeof fs->cwd_name);
+ __pxe_chdir(fs, src, path_type);
dprintf("cwd = \"%s\"\n", fs->cwd_name);
return 0;
@@ -1065,7 +1075,7 @@ static int pxe_open_config(struct com32_filedata *filedata)
char *last;
int tries = 8;
- chdir(path_prefix);
+ get_prefix();
if (DHCPMagic & 0x02) {
/* We got a DHCP option, try it first */
if (open_file(ConfigName, filedata) >= 0)
More information about the Syslinux-commits
mailing list