diff mbox

[U-Boot,5/7] pxe: support absolute paths

Message ID 1332949898-6502-6-git-send-email-robherring2@gmail.com
State Accepted
Commit 90ba7d7c444856ca8619ab63e6ed4ab1560f564d
Delegated to: Joe Hershberger
Headers show

Commit Message

Rob Herring March 28, 2012, 3:51 p.m. UTC
From: Rob Herring <rob.herring@calxeda.com>

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>
---
 common/cmd_pxe.c |   23 ++++++++++++-----------
 1 files changed, 12 insertions(+), 11 deletions(-)

Comments

Wolfgang Denk June 21, 2012, 8:35 p.m. UTC | #1
Dear Rob Herring,

In message <1332949898-6502-6-git-send-email-robherring2@gmail.com> you wrote:
> From: Rob Herring <rob.herring@calxeda.com>
> 
> 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>
> ---
>  common/cmd_pxe.c |   23 ++++++++++++-----------
>  1 files changed, 12 insertions(+), 11 deletions(-)

Applied, thanks.

Best regards,

Wolfgang Denk
diff mbox

Patch

diff --git a/common/cmd_pxe.c b/common/cmd_pxe.c
index b8cb4f3..ac1bc56 100644
--- a/common/cmd_pxe.c
+++ b/common/cmd_pxe.c
@@ -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
  * 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;
-	size_t path_len;
+	size_t path_len = 0;
+
+	if (file_path[0] == '/')
+		goto ret;
 
 	bootfile = from_env("bootfile");
 
-	if (!bootfile) {
-		bootfile_path[0] = '\0';
-		return 1;
-	}
+	if (!bootfile)
+		goto ret;
 
 	last_slash = strrchr(bootfile, '/');
 
-	if (last_slash == NULL) {
-		bootfile_path[0] = '\0';
-		return 1;
-	}
+	if (last_slash == NULL)
+		goto ret;
 
 	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);
 
+ ret:
 	bootfile_path[path_len] = '\0';
 
 	return 1;
@@ -147,7 +148,7 @@  static int get_relfile(char *file_path, void *file_addr)
 	char *tftp_argv[] = {"tftp", NULL, NULL, NULL};
 	int err;
 
-	err = get_bootfile_path(relfile, sizeof(relfile));
+	err = get_bootfile_path(file_path, relfile, sizeof(relfile));
 
 	if (err < 0)
 		return err;