forked from 96boards/edk2
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This refactors 3 functions out of ShellCommandLib and puts them into …
…a new library (but as 2 functions instead of 3). This allows for users outside of the shell itself to have access to these functions. 1) Remove the 3 functions out of the shell's internal library (ShellCommandLib) 2) Add a new library class (PathLib) 3) Add an instance of this class (BasePathLib) 4) Change all internal shell callers to use this new library class. signed-off-by: jcarsey reviewed-by: jljusten git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11936 6f19259b-4bc3-4df7-8a09-765794883524
- Loading branch information
jcarsey
committed
Jun 30, 2011
1 parent
f1518f6
commit ab94587
Showing
21 changed files
with
245 additions
and
173 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
/** @file | ||
Provides interface to path manipulation functions. | ||
Copyright (c) 2011, Intel Corporation. All rights reserved.<BR> | ||
This program and the accompanying materials | ||
are licensed and made available under the terms and conditions of the BSD License | ||
which accompanies this distribution. The full text of the license may be found at | ||
http://opensource.org/licenses/bsd-license.php. | ||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | ||
**/ | ||
|
||
#ifndef _PATH_LIB_ | ||
#define _PATH_LIB_ | ||
|
||
#include <Base.h> | ||
#include <Library/BaseMemoryLib.h> | ||
|
||
/** | ||
Removes the last directory or file entry in a path by changing the last | ||
L'\' to a CHAR_NULL. | ||
@param[in,out] Path The pointer to the path to modify. | ||
@retval FALSE Nothing was found to remove. | ||
@retval TRUE A directory or file was removed. | ||
**/ | ||
BOOLEAN | ||
EFIAPI | ||
PathRemoveLastItem( | ||
IN OUT CHAR16 *Path | ||
); | ||
|
||
/** | ||
Function to clean up paths. | ||
- Single periods in the path are removed. | ||
- Double periods in the path are removed along with a single parent directory. | ||
- Forward slashes L'/' are converted to backward slashes L'\'. | ||
This will be done inline and the existing buffer may be larger than required | ||
upon completion. | ||
@param[in] Path The pointer to the string containing the path. | ||
@retval NULL An error occured. | ||
@return Path in all other instances. | ||
**/ | ||
CHAR16* | ||
EFIAPI | ||
PathCleanUpDirectories( | ||
IN CHAR16 *Path | ||
); | ||
|
||
#endif //_PATH_LIB_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
/** @file | ||
Provides interface to path manipulation functions. | ||
Copyright (c) 2011, Intel Corporation. All rights reserved.<BR> | ||
This program and the accompanying materials | ||
are licensed and made available under the terms and conditions of the BSD License | ||
which accompanies this distribution. The full text of the license may be found at | ||
http://opensource.org/licenses/bsd-license.php. | ||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | ||
**/ | ||
|
||
#include <Base.h> | ||
#include <Library/BaseMemoryLib.h> | ||
#include <Library/PathLib.h> | ||
#include <Library/BaseLib.h> | ||
|
||
/** | ||
Removes the last directory or file entry in a path by changing the last | ||
L'\' to a CHAR_NULL. | ||
@param[in,out] Path The pointer to the path to modify. | ||
@retval FALSE Nothing was found to remove. | ||
@retval TRUE A directory or file was removed. | ||
**/ | ||
BOOLEAN | ||
EFIAPI | ||
PathRemoveLastItem( | ||
IN OUT CHAR16 *Path | ||
) | ||
{ | ||
CHAR16 *Walker; | ||
CHAR16 *LastSlash; | ||
// | ||
// get directory name from path... ('chop' off extra) | ||
// | ||
for ( Walker = Path, LastSlash = NULL | ||
; Walker != NULL && *Walker != CHAR_NULL | ||
; Walker++ | ||
){ | ||
if (*Walker == L'\\' && *(Walker + 1) != CHAR_NULL) { | ||
LastSlash = Walker+1; | ||
} | ||
} | ||
if (LastSlash != NULL) { | ||
*LastSlash = CHAR_NULL; | ||
return (TRUE); | ||
} | ||
return (FALSE); | ||
} | ||
|
||
/** | ||
Function to clean up paths. | ||
- Single periods in the path are removed. | ||
- Double periods in the path are removed along with a single parent directory. | ||
- Forward slashes L'/' are converted to backward slashes L'\'. | ||
This will be done inline and the existing buffer may be larger than required | ||
upon completion. | ||
@param[in] Path The pointer to the string containing the path. | ||
@retval NULL An error occured. | ||
@return Path in all other instances. | ||
**/ | ||
CHAR16* | ||
EFIAPI | ||
PathCleanUpDirectories( | ||
IN CHAR16 *Path | ||
) | ||
{ | ||
CHAR16 *TempString; | ||
UINTN TempSize; | ||
if (Path==NULL) { | ||
return(NULL); | ||
} | ||
|
||
// | ||
// Fix up the / vs \ | ||
// | ||
for (TempString = Path ; TempString != NULL && *TempString != CHAR_NULL ; TempString++) { | ||
if (*TempString == L'/') { | ||
*TempString = L'\\'; | ||
} | ||
} | ||
|
||
// | ||
// Fix up the .. | ||
// | ||
while ((TempString = StrStr(Path, L"\\..\\")) != NULL) { | ||
*TempString = CHAR_NULL; | ||
TempString += 4; | ||
PathRemoveLastItem(Path); | ||
TempSize = StrSize(TempString); | ||
CopyMem(Path+StrLen(Path), TempString, TempSize); | ||
} | ||
if ((TempString = StrStr(Path, L"\\..")) != NULL && *(TempString + 3) == CHAR_NULL) { | ||
*TempString = CHAR_NULL; | ||
PathRemoveLastItem(Path); | ||
} | ||
|
||
// | ||
// Fix up the . | ||
// | ||
while ((TempString = StrStr(Path, L"\\.\\")) != NULL) { | ||
*TempString = CHAR_NULL; | ||
TempString += 2; | ||
TempSize = StrSize(TempString); | ||
CopyMem(Path+StrLen(Path), TempString, TempSize); | ||
} | ||
if ((TempString = StrStr(Path, L"\\.")) != NULL && *(TempString + 2) == CHAR_NULL) { | ||
*TempString = CHAR_NULL; | ||
} | ||
|
||
|
||
|
||
return (Path); | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
## @file | ||
# Provides interface to path manipulation functions. | ||
# | ||
# Copyright (c) 2011, Intel Corporation. All rights reserved. <BR> | ||
# | ||
# This program and the accompanying materials | ||
# are licensed and made available under the terms and conditions of the BSD License | ||
# which accompanies this distribution. The full text of the license may be found at | ||
# http://opensource.org/licenses/bsd-license.php | ||
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | ||
# | ||
# | ||
## | ||
|
||
[Defines] | ||
INF_VERSION = 0x00010006 | ||
BASE_NAME = BasePathLib | ||
FILE_GUID = ED244F93-B97A-4a17-83E0-A03CF2A7F7B4 | ||
MODULE_TYPE = UEFI_DRIVER | ||
VERSION_STRING = 1.0 | ||
LIBRARY_CLASS = PathLib|UEFI_APPLICATION UEFI_DRIVER | ||
|
||
# | ||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC | ||
# | ||
|
||
[Sources.common] | ||
BasePathLib.c | ||
|
||
[Packages] | ||
MdePkg/MdePkg.dec | ||
ShellPkg/ShellPkg.dec | ||
|
||
|
||
[LibraryClasses] | ||
BaseMemoryLib | ||
BaseLib |
Oops, something went wrong.