Don't put the directory in the file path twice.

Sometimes when we're creating paths, the ImagePath can contain the
directory name already.  If that happens, don't add it in again.

Signed-off-by: Peter Jones <pjones@redhat.com>
This commit is contained in:
Peter Jones 2013-04-26 11:44:28 -04:00
parent 6e1bd3dcb7
commit 155a76bb86
2 changed files with 21 additions and 1 deletions

3
shim.c
View File

@ -939,7 +939,8 @@ static EFI_STATUS generate_path(EFI_LOADED_IMAGE *li, CHAR16 *ImagePath,
} }
*PathName[0] = '\0'; *PathName[0] = '\0';
StrCat(*PathName, bootpath); if (StrnCaseCmp(bootpath, ImagePath, StrLen(bootpath)))
StrCat(*PathName, bootpath);
StrCat(*PathName, ImagePath); StrCat(*PathName, ImagePath);
*grubpath = FileDevicePath(device, *PathName); *grubpath = FileDevicePath(device, *PathName);

19
ucs2.h
View File

@ -54,4 +54,23 @@ StrCaseCmp(CHAR16 *s0, CHAR16 *s1)
return 0; return 0;
} }
static inline INTN
__attribute__((unused))
StrnCaseCmp(CHAR16 *s0, CHAR16 *s1, int n)
{
CHAR16 c0, c1;
int x = 0;
while (n > x++) {
if (*s0 == L'\0' || *s1 == L'\0')
return *s1 - *s0;
c0 = (*s0 >= L'a' && *s0 <= L'z') ? *s0 - 32 : *s0;
c1 = (*s1 >= L'a' && *s1 <= L'z') ? *s1 - 32 : *s1;
if (c0 != c1)
return c1 - c0;
s0++;
s1++;
}
return 0;
}
#endif /* SHIM_UCS2_H */ #endif /* SHIM_UCS2_H */