From 5c736550e8f7645f39df6948785ab5cae2201418 Mon Sep 17 00:00:00 2001 From: Gary Ching-Pang Lin Date: Fri, 1 Mar 2013 18:04:06 +0800 Subject: [PATCH] Remove double-separators from the bootpath --- shim.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/shim.c b/shim.c index 690d064..c36b641 100644 --- a/shim.c +++ b/shim.c @@ -907,7 +907,7 @@ static EFI_STATUS generate_path(EFI_LOADED_IMAGE *li, CHAR16 *ImagePath, { EFI_DEVICE_PATH *devpath; EFI_HANDLE device; - int i; + int i, j, last = -1; unsigned int pathlen = 0; EFI_STATUS efi_status = EFI_SUCCESS; CHAR16 *bootpath; @@ -927,14 +927,27 @@ static EFI_STATUS generate_path(EFI_LOADED_IMAGE *li, CHAR16 *ImagePath, if (bootpath[i] == '/') bootpath[i] = '\\'; } + for (i=pathlen; i>0; i--) { - if (bootpath[i] == '\\' && bootpath[i-1] != '\\') - break; + if (bootpath[i] == '\\' && bootpath[i-1] == '\\') + bootpath[i] = '/'; + else if (last == -1 && bootpath[i] == '\\') + last = i; + } + + if (last == -1 && bootpath[0] == '\\') + last = 0; + bootpath[last+1] = '\0'; + + if (last > 0) { + for (i = 0, j = 0; bootpath[i] != '\0'; i++) { + if (bootpath[i] != '/') { + bootpath[j] = bootpath[i]; + j++; + } + } + bootpath[j] = '\0'; } - if (bootpath[i] == '\\') - bootpath[i+1] = '\0'; - else - bootpath[0] = '\0'; while (*ImagePath == '\\') ImagePath++; -- 1.7.10.4