Skip to content
Snippets Groups Projects
Commit 90ba7d7c authored by Rob Herring's avatar Rob Herring Committed by Wolfgang Denk
Browse files

pxe: support absolute paths


If the file path starts with a '/', then don't pre-pend the bootfile path.
This fixes a problem with running 'pxe boot' multiple times where the
bootfile path gets pre-pended to itself each time.

Signed-off-by: default avatarRob Herring <rob.herring@calxeda.com>
parent beb9f6c6
No related branches found
No related tags found
No related merge requests found
...@@ -96,24 +96,24 @@ static int format_mac_pxe(char *outbuf, size_t outbuf_len) ...@@ -96,24 +96,24 @@ static int format_mac_pxe(char *outbuf, size_t outbuf_len)
* in. If bootfile isn't defined in the environment, return NULL, which should * in. If bootfile isn't defined in the environment, return NULL, which should
* be interpreted as "don't prepend anything to paths". * be interpreted as "don't prepend anything to paths".
*/ */
static int get_bootfile_path(char *bootfile_path, size_t bootfile_path_size) static int get_bootfile_path(const char *file_path, char *bootfile_path,
size_t bootfile_path_size)
{ {
char *bootfile, *last_slash; char *bootfile, *last_slash;
size_t path_len; size_t path_len = 0;
if (file_path[0] == '/')
goto ret;
bootfile = from_env("bootfile"); bootfile = from_env("bootfile");
if (!bootfile) { if (!bootfile)
bootfile_path[0] = '\0'; goto ret;
return 1;
}
last_slash = strrchr(bootfile, '/'); last_slash = strrchr(bootfile, '/');
if (last_slash == NULL) { if (last_slash == NULL)
bootfile_path[0] = '\0'; goto ret;
return 1;
}
path_len = (last_slash - bootfile) + 1; path_len = (last_slash - bootfile) + 1;
...@@ -126,6 +126,7 @@ static int get_bootfile_path(char *bootfile_path, size_t bootfile_path_size) ...@@ -126,6 +126,7 @@ static int get_bootfile_path(char *bootfile_path, size_t bootfile_path_size)
strncpy(bootfile_path, bootfile, path_len); strncpy(bootfile_path, bootfile, path_len);
ret:
bootfile_path[path_len] = '\0'; bootfile_path[path_len] = '\0';
return 1; return 1;
...@@ -147,7 +148,7 @@ static int get_relfile(char *file_path, void *file_addr) ...@@ -147,7 +148,7 @@ static int get_relfile(char *file_path, void *file_addr)
char *tftp_argv[] = {"tftp", NULL, NULL, NULL}; char *tftp_argv[] = {"tftp", NULL, NULL, NULL};
int err; int err;
err = get_bootfile_path(relfile, sizeof(relfile)); err = get_bootfile_path(file_path, relfile, sizeof(relfile));
if (err < 0) if (err < 0)
return err; return err;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment