diff options
author | andrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-02-07 22:04:03 +0000 |
---|---|---|
committer | andrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-02-07 22:04:03 +0000 |
commit | 85e385f42b3a93dd51d76173eb4083f9caf803d7 (patch) | |
tree | f877f01b775eaaab7291c6aa5ce29111c6fe6ad7 /EmbeddedPkg/Library | |
parent | 3ba736f39cdb1d587089885dcde4b501eea9962e (diff) | |
download | edk2-platforms-85e385f42b3a93dd51d76173eb4083f9caf803d7.tar.xz |
Added CWD to EfiFileLib. Fix some X64 warnings.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9942 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'EmbeddedPkg/Library')
-rw-r--r-- | EmbeddedPkg/Library/EfiFileLib/EfiFileLib.c | 83 |
1 files changed, 82 insertions, 1 deletions
diff --git a/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.c b/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.c index 5effe7fcb9..cbe2aeeceb 100644 --- a/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.c +++ b/EmbeddedPkg/Library/EfiFileLib/EfiFileLib.c @@ -55,6 +55,9 @@ #include <Library/EblNetworkLib.h> +CHAR8 *gCwd = NULL; + + #define EFI_OPEN_FILE_GUARD_HEADER 0x4B4D4641 #define EFI_OPEN_FILE_GUARD_FOOTER 0x444D5A56 @@ -635,6 +638,7 @@ EfiOpen ( EFI_DEVICE_PATH_PROTOCOL *DevicePath; UINTN Size; EFI_IP_ADDRESS Ip; + CHAR8 *CwdPlusPathName; EblUpdateDeviceLists (); @@ -656,8 +660,22 @@ EfiOpen ( } if (FileStart == 0) { + if (gCwd == NULL) { + // No CWD + return NULL; + } + // We could add a current working diretory concept - return NULL; + CwdPlusPathName = AllocatePool (AsciiStrSize (gCwd) + AsciiStrSize (PathName)); + if (CwdPlusPathName == NULL) { + return NULL; + } + + AsciiStrCpy (CwdPlusPathName, gCwd); + AsciiStrCat (CwdPlusPathName, PathName); + File = EfiOpen (CwdPlusPathName, OpenMode, SectionType); + FreePool (CwdPlusPathName); + return File; } // @@ -1481,3 +1499,66 @@ EfiWrite ( return Status; } + + +/** + Set the Curent Working Directory (CWD). If a call is made to EfiOpen () and + the path does not contain a device name, The CWD is prepended to the path. + + @param Cwd Current Working Directory to set + + + @return EFI_SUCCESS CWD is set + @return EFI_INVALID_PARAMETER Cwd is not a valid device:path + +**/ +EFI_STATUS +EfiSetCwd ( + IN CHAR8 *Cwd + ) +{ + EFI_OPEN_FILE *File; + + File = EfiOpen (Cwd, EFI_FILE_MODE_READ, 0); + if (File == NULL) { + return EFI_INVALID_PARAMETER; + } + + EfiClose (File); + + if (gCwd != NULL) { + FreePool (gCwd); + } + + gCwd = AllocatePool (AsciiStrSize (Cwd)); + if (gCwd == NULL) { + return EFI_INVALID_PARAMETER; + } + AsciiStrCpy (gCwd, Cwd); + return EFI_SUCCESS; +} + + +/** + Set the Curent Working Directory (CWD). If a call is made to EfiOpen () and + the path does not contain a device name, The CWD is prepended to the path. + The CWD buffer is only valid until a new call is made to EfiSetCwd(). After + a call to EfiSetCwd() it is not legal to use the pointer returned by + this funciton. + + @param Cwd Current Working Directory + + + @return NULL No CWD set + @return 'other' Returns buffer that contains CWD. + +**/ +CHAR8 * +EfiGettCwd ( + VOID + ) +{ + return gCwd; +} + + |