mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-20 22:21:41 +00:00
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: Rob Herring <rob.herring@calxeda.com>
This commit is contained in:
parent
beb9f6c678
commit
90ba7d7c44
1 changed files with 12 additions and 11 deletions
|
@ -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)
|
||||||
|
|
||||||
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)
|
||||||
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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue