diff options
author | andrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-02-10 19:14:55 +0000 |
---|---|---|
committer | andrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-02-10 19:14:55 +0000 |
commit | 37e0f9ac5128f03ee1631b3f68c92a9bacb4a1c6 (patch) | |
tree | 4601a65e43932eb9cfbfea7ed9fea4ee884666af | |
parent | 6640eb366c5cc3df1d1c174ad95d9d1ec3f768cc (diff) | |
download | edk2-37e0f9ac5128f03ee1631b3f68c92a9bacb4a1c6.zip edk2-37e0f9ac5128f03ee1631b3f68c92a9bacb4a1c6.tar.gz edk2-37e0f9ac5128f03ee1631b3f68c92a9bacb4a1c6.tar.bz2 |
Fix issue with VOLUMN Name as an alias for device name.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9970 6f19259b-4bc3-4df7-8a09-765794883524
-rw-r--r-- | EmbeddedPkg/Library/EfiFileLib/EfiFileLib.c | 85 |
1 files changed, 43 insertions, 42 deletions
diff --git a/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.c b/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.c index a956e61..d6259c0 100644 --- a/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.c +++ b/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.c @@ -659,53 +659,54 @@ EfiOpen ( } } - if (FileStart == StrLen) { - if (gCwd == NULL) { - // No CWD - return NULL; - } - - // We could add a current working diretory concept - CwdPlusPathName = AllocatePool (AsciiStrSize (gCwd) + AsciiStrSize (PathName)); - if (CwdPlusPathName == NULL) { - return NULL; - } - - if ((PathName[0] == '/') || (PathName[0] == '\\')) { - // PathName starts in / so this means we go to the root of the device in the CWD. - CwdPlusPathName[0] = '\0'; - for (FileStart = 0; gCwd[FileStart] != '\0'; FileStart++) { - CwdPlusPathName[FileStart] = gCwd[FileStart]; - if (gCwd[FileStart] == ':') { - FileStart++; - CwdPlusPathName[FileStart] = '\0'; - break; - } - } - } else { - AsciiStrCpy (CwdPlusPathName, gCwd); - StrLen = AsciiStrLen (gCwd); - if ((*PathName != '/') && (*PathName != '\\') && (gCwd[StrLen-1] != '/') && (gCwd[StrLen-1] != '\\')) { - AsciiStrCat (CwdPlusPathName, "\\"); - } - } - - AsciiStrCat (CwdPlusPathName, PathName); - if (AsciiStrStr (CwdPlusPathName, ":") == NULL) { - // Extra error check to make sure we don't recusre and blow stack - return NULL; - } - - File = EfiOpen (CwdPlusPathName, OpenMode, SectionType); - FreePool (CwdPlusPathName); - return File; - } - // // Matching volume name has precedence over handle based names // VolumeNameMatch = EblMatchVolumeName (PathName, FileStart, &DevNumber); if (!VolumeNameMatch) { + if (FileStart == StrLen) { + // No Volume name or device name, so try Current Working Directory + if (gCwd == NULL) { + // No CWD + return NULL; + } + + // We could add a current working diretory concept + CwdPlusPathName = AllocatePool (AsciiStrSize (gCwd) + AsciiStrSize (PathName)); + if (CwdPlusPathName == NULL) { + return NULL; + } + + if ((PathName[0] == '/') || (PathName[0] == '\\')) { + // PathName starts in / so this means we go to the root of the device in the CWD. + CwdPlusPathName[0] = '\0'; + for (FileStart = 0; gCwd[FileStart] != '\0'; FileStart++) { + CwdPlusPathName[FileStart] = gCwd[FileStart]; + if (gCwd[FileStart] == ':') { + FileStart++; + CwdPlusPathName[FileStart] = '\0'; + break; + } + } + } else { + AsciiStrCpy (CwdPlusPathName, gCwd); + StrLen = AsciiStrLen (gCwd); + if ((*PathName != '/') && (*PathName != '\\') && (gCwd[StrLen-1] != '/') && (gCwd[StrLen-1] != '\\')) { + AsciiStrCat (CwdPlusPathName, "\\"); + } + } + + AsciiStrCat (CwdPlusPathName, PathName); + if (AsciiStrStr (CwdPlusPathName, ":") == NULL) { + // Extra error check to make sure we don't recusre and blow stack + return NULL; + } + + File = EfiOpen (CwdPlusPathName, OpenMode, SectionType); + FreePool (CwdPlusPathName); + return File; + } + DevNumber = EblConvertDevStringToNumber ((CHAR8 *)PathName); } |