mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-29 16:44:10 +02:00
adding new parameter to search and replace function to allow for easy skipping of items preceded by ^
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9726 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
965626c940
commit
969c783b46
@ -1033,6 +1033,8 @@ StrnCatGrow (
|
|||||||
@param[in] NewSize Size in bytes of NewString.
|
@param[in] NewSize Size in bytes of NewString.
|
||||||
@param[in] FindTarget String to look for.
|
@param[in] FindTarget String to look for.
|
||||||
@param[in] ReplaceWith String to replace FindTarget with.
|
@param[in] ReplaceWith String to replace FindTarget with.
|
||||||
|
@param[in] SkipPreCarrot If TRUE will skip a FindTarget that has a '^'
|
||||||
|
immediately before it.
|
||||||
|
|
||||||
@retval EFI_INVALID_PARAMETER SourceString was NULL.
|
@retval EFI_INVALID_PARAMETER SourceString was NULL.
|
||||||
@retval EFI_INVALID_PARAMETER NewString was NULL.
|
@retval EFI_INVALID_PARAMETER NewString was NULL.
|
||||||
@ -1042,19 +1044,25 @@ StrnCatGrow (
|
|||||||
@retval EFI_INVALID_PARAMETER SourceString had length < 1.
|
@retval EFI_INVALID_PARAMETER SourceString had length < 1.
|
||||||
@retval EFI_BUFFER_TOO_SMALL NewSize was less than the minimum size to hold
|
@retval EFI_BUFFER_TOO_SMALL NewSize was less than the minimum size to hold
|
||||||
the new string (truncation occurred).
|
the new string (truncation occurred).
|
||||||
@retval EFI_SUCCESS the string was sucessfully copied with replacement.
|
@retval EFI_SUCCESS The string was sucessfully copied with replacement.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellLibCopySearchAndReplace(
|
ShellCopySearchAndReplace2(
|
||||||
IN CHAR16 CONST *SourceString,
|
IN CHAR16 CONST *SourceString,
|
||||||
IN CHAR16 *NewString,
|
IN CHAR16 *NewString,
|
||||||
IN UINTN NewSize,
|
IN UINTN NewSize,
|
||||||
IN CONST CHAR16 *FindTarget,
|
IN CONST CHAR16 *FindTarget,
|
||||||
IN CONST CHAR16 *ReplaceWith
|
IN CONST CHAR16 *ReplaceWith,
|
||||||
|
IN CONST BOOLEAN SkipPreCarrot
|
||||||
);
|
);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// make upgrades easier from old version
|
||||||
|
///
|
||||||
|
#define ShellLibCopySearchAndReplace(a,b,c,d,e) ShellCopySearchAndReplace2(a,b,c,d,e,FALSE)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Check if a Unicode character is a hexadecimal character.
|
Check if a Unicode character is a hexadecimal character.
|
||||||
|
|
||||||
@ -1070,7 +1078,7 @@ ShellLibCopySearchAndReplace(
|
|||||||
**/
|
**/
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellLibIsHexaDecimalDigitCharacter (
|
ShellIsHexaDecimalDigitCharacter (
|
||||||
IN CHAR16 Char
|
IN CHAR16 Char
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ STATIC CHAR16 *mPostReplaceFormat2;
|
|||||||
**/
|
**/
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellLibIsHexaDecimalDigitCharacter (
|
ShellIsHexaDecimalDigitCharacter (
|
||||||
IN CHAR16 Char
|
IN CHAR16 Char
|
||||||
) {
|
) {
|
||||||
return (BOOLEAN) ((Char >= L'0' && Char <= L'9') || (Char >= L'A' && Char <= L'F') || (Char >= L'a' && Char <= L'f'));
|
return (BOOLEAN) ((Char >= L'0' && Char <= L'9') || (Char >= L'A' && Char <= L'F') || (Char >= L'a' && Char <= L'f'));
|
||||||
@ -1684,7 +1684,7 @@ InternalIsFlag (
|
|||||||
//
|
//
|
||||||
// If we accept numbers then dont return TRUE. (they will be values)
|
// If we accept numbers then dont return TRUE. (they will be values)
|
||||||
//
|
//
|
||||||
if (((Name[0] == L'-' || Name[0] == L'+') && ShellLibIsHexaDecimalDigitCharacter(Name[1])) && AlwaysAllowNumbers != FALSE) {
|
if (((Name[0] == L'-' || Name[0] == L'+') && ShellIsHexaDecimalDigitCharacter(Name[1])) && AlwaysAllowNumbers != FALSE) {
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2249,26 +2249,29 @@ ShellCommandLineCheckDuplicate (
|
|||||||
@param[in] NewSize Size in bytes of NewString
|
@param[in] NewSize Size in bytes of NewString
|
||||||
@param[in] FindTarget String to look for
|
@param[in] FindTarget String to look for
|
||||||
@param[in[ ReplaceWith String to replace FindTarget with
|
@param[in[ ReplaceWith String to replace FindTarget with
|
||||||
|
@param[in] SkipPreCarrot If TRUE will skip a FindTarget that has a '^'
|
||||||
|
immediately before it.
|
||||||
|
|
||||||
@retval EFI_INVALID_PARAMETER SourceString was NULL
|
@retval EFI_INVALID_PARAMETER SourceString was NULL.
|
||||||
@retval EFI_INVALID_PARAMETER NewString was NULL
|
@retval EFI_INVALID_PARAMETER NewString was NULL.
|
||||||
@retval EFI_INVALID_PARAMETER FindTarget was NULL
|
@retval EFI_INVALID_PARAMETER FindTarget was NULL.
|
||||||
@retval EFI_INVALID_PARAMETER ReplaceWith was NULL
|
@retval EFI_INVALID_PARAMETER ReplaceWith was NULL.
|
||||||
@retval EFI_INVALID_PARAMETER FindTarget had length < 1
|
@retval EFI_INVALID_PARAMETER FindTarget had length < 1.
|
||||||
@retval EFI_INVALID_PARAMETER SourceString had length < 1
|
@retval EFI_INVALID_PARAMETER SourceString had length < 1.
|
||||||
@retval EFI_BUFFER_TOO_SMALL NewSize was less than the minimum size to hold
|
@retval EFI_BUFFER_TOO_SMALL NewSize was less than the minimum size to hold
|
||||||
the new string (truncation occurred)
|
the new string (truncation occurred).
|
||||||
@retval EFI_SUCCESS the string was sucessfully copied with replacement
|
@retval EFI_SUCCESS the string was sucessfully copied with replacement.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellLibCopySearchAndReplace(
|
ShellCopySearchAndReplace2(
|
||||||
IN CHAR16 CONST *SourceString,
|
IN CHAR16 CONST *SourceString,
|
||||||
IN CHAR16 *NewString,
|
IN CHAR16 *NewString,
|
||||||
IN UINTN NewSize,
|
IN UINTN NewSize,
|
||||||
IN CONST CHAR16 *FindTarget,
|
IN CONST CHAR16 *FindTarget,
|
||||||
IN CONST CHAR16 *ReplaceWith
|
IN CONST CHAR16 *ReplaceWith,
|
||||||
|
IN CONST BOOLEAN SkipPreCarrot
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN Size;
|
UINTN Size;
|
||||||
@ -2283,7 +2286,13 @@ ShellLibCopySearchAndReplace(
|
|||||||
}
|
}
|
||||||
NewString = SetMem16(NewString, NewSize, CHAR_NULL);
|
NewString = SetMem16(NewString, NewSize, CHAR_NULL);
|
||||||
while (*SourceString != CHAR_NULL) {
|
while (*SourceString != CHAR_NULL) {
|
||||||
if (StrnCmp(SourceString, FindTarget, StrLen(FindTarget)) == 0) {
|
//
|
||||||
|
// if we find the FindTarget and either Skip == FALSE or Skip == TRUE and we
|
||||||
|
// dont have a carrot do a replace...
|
||||||
|
//
|
||||||
|
if (StrnCmp(SourceString, FindTarget, StrLen(FindTarget)) == 0
|
||||||
|
&& ((SkipPreCarrot && *(SourceString-1) != L'^') || SkipPreCarrot == FALSE)
|
||||||
|
){
|
||||||
SourceString += StrLen(FindTarget);
|
SourceString += StrLen(FindTarget);
|
||||||
Size = StrSize(NewString);
|
Size = StrSize(NewString);
|
||||||
if ((Size + (StrLen(ReplaceWith)*sizeof(CHAR16))) > NewSize) {
|
if ((Size + (StrLen(ReplaceWith)*sizeof(CHAR16))) > NewSize) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user