mirror of https://github.com/acidanthera/audk.git
ShellPkg/Level2Command: Use UnicodeCollation in StrinCmp
Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
This commit is contained in:
parent
d65f2cea36
commit
630cb8507b
|
@ -3,7 +3,7 @@
|
|||
|
||||
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
|
||||
(C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
|
||||
Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2009 - 2018, 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
|
||||
|
@ -102,7 +102,7 @@ IsCurrentFileSystem (
|
|||
if (((UINTN) Splitter1 - (UINTN) FullPath) != ((UINTN) Splitter2 - (UINTN) Cwd)) {
|
||||
return FALSE;
|
||||
} else {
|
||||
if (StrniCmp (FullPath, Cwd, ((UINTN) Splitter1 - (UINTN) FullPath) / sizeof (CHAR16)) == NULL) {
|
||||
if (StrniCmp (FullPath, Cwd, ((UINTN) Splitter1 - (UINTN) FullPath) / sizeof (CHAR16)) == 0) {
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
Main file for cp shell level 2 function.
|
||||
|
||||
(C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
|
||||
Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2009 - 2018, 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
|
||||
|
@ -510,7 +510,7 @@ ValidateAndCopyFiles(
|
|||
|
||||
if ( !EFI_ERROR(ShellIsDirectory(Node->FullName))
|
||||
&& !EFI_ERROR(ShellIsDirectory(DestPath))
|
||||
&& StrniCmp(Node->FullName, DestPath, StrLen(DestPath)) == NULL
|
||||
&& StrniCmp(Node->FullName, DestPath, StrLen(DestPath)) == 0
|
||||
){
|
||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CP_SD_PARENT), gShellLevel2HiiHandle, L"cp");
|
||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
Main file for time, timezone, and date shell level 2 and shell level 3 functions.
|
||||
|
||||
(C) Copyright 2012-2015 Hewlett-Packard Development Company, L.P.<BR>
|
||||
Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2009 - 2018, 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
|
||||
|
@ -550,7 +550,7 @@ ShellCommandRunTime (
|
|||
// perform level 3 operation here.
|
||||
//
|
||||
if ((TempLocation = ShellCommandLineGetValue(Package, L"-tz")) != NULL) {
|
||||
if (StrniCmp (TempLocation, L"_local", StrLen (TempLocation)) == NULL) {
|
||||
if (gUnicodeCollation->StriColl(gUnicodeCollation, (CHAR16 *)TempLocation, L"_local") == 0) {
|
||||
Tz = EFI_UNSPECIFIED_TIMEZONE;
|
||||
} else if (TempLocation[0] == L'-') {
|
||||
|
||||
|
@ -713,7 +713,7 @@ CheckAndSetTimeZone (
|
|||
return (SHELL_INVALID_PARAMETER);
|
||||
}
|
||||
|
||||
if (StrniCmp (TimeZoneString, L"_local", StrLen (TimeZoneString)) == NULL) {
|
||||
if (gUnicodeCollation->StriColl(gUnicodeCollation, (CHAR16 *)TimeZoneString, L"_local") == 0) {
|
||||
Status = gRT->GetTime (&TheTime, NULL);
|
||||
if (EFI_ERROR (Status)) {
|
||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_UEFI_FUNC_WARN), gShellLevel2HiiHandle, L"gRT->GetTime", Status);
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
* functions are non-interactive only
|
||||
|
||||
Copyright (c) 2014 Hewlett-Packard Development Company, L.P.
|
||||
Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2009 - 2018, 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
|
||||
|
@ -260,19 +260,6 @@ VerifyIntermediateDirectories (
|
|||
return (Status);
|
||||
}
|
||||
|
||||
/**
|
||||
Be lazy and borrow from baselib.
|
||||
|
||||
@param[in] Char The character to convert to upper case.
|
||||
|
||||
@return Char as an upper case character.
|
||||
**/
|
||||
CHAR16
|
||||
EFIAPI
|
||||
InternalCharToUpper (
|
||||
IN CHAR16 Char
|
||||
);
|
||||
|
||||
/**
|
||||
String comparison without regard to case for a limited number of characters.
|
||||
|
||||
|
@ -280,31 +267,47 @@ InternalCharToUpper (
|
|||
@param[in] Target The second item to compare.
|
||||
@param[in] Count How many characters to compare.
|
||||
|
||||
@retval NULL Source and Target are identical strings without regard to case.
|
||||
@return The location in Source where there is a difference.
|
||||
@retval 0 Source and Target are identical strings without regard to case.
|
||||
@retval !=0 Source is not identical to Target.
|
||||
|
||||
**/
|
||||
CONST CHAR16*
|
||||
INTN
|
||||
StrniCmp(
|
||||
IN CONST CHAR16 *Source,
|
||||
IN CONST CHAR16 *Target,
|
||||
IN CONST UINTN Count
|
||||
)
|
||||
{
|
||||
UINTN LoopCount;
|
||||
CHAR16 Char1;
|
||||
CHAR16 Char2;
|
||||
CHAR16 *SourceCopy;
|
||||
CHAR16 *TargetCopy;
|
||||
UINTN SourceLength;
|
||||
UINTN TargetLength;
|
||||
INTN Result;
|
||||
|
||||
ASSERT(Source != NULL);
|
||||
ASSERT(Target != NULL);
|
||||
|
||||
for (LoopCount = 0 ; LoopCount < Count ; LoopCount++) {
|
||||
Char1 = InternalCharToUpper(Source[LoopCount]);
|
||||
Char2 = InternalCharToUpper(Target[LoopCount]);
|
||||
if (Char1 != Char2) {
|
||||
return (&Source[LoopCount]);
|
||||
}
|
||||
if (Count == 0) {
|
||||
return 0;
|
||||
}
|
||||
return (NULL);
|
||||
|
||||
SourceLength = StrLen (Source);
|
||||
TargetLength = StrLen (Target);
|
||||
SourceLength = MIN (SourceLength, Count);
|
||||
TargetLength = MIN (TargetLength, Count);
|
||||
SourceCopy = AllocateCopyPool ((SourceLength + 1) * sizeof (CHAR16), Source);
|
||||
if (SourceCopy == NULL) {
|
||||
return -1;
|
||||
}
|
||||
TargetCopy = AllocateCopyPool ((TargetLength + 1) * sizeof (CHAR16), Target);
|
||||
if (TargetCopy == NULL) {
|
||||
FreePool (SourceCopy);
|
||||
return -1;
|
||||
}
|
||||
|
||||
SourceCopy[SourceLength] = L'\0';
|
||||
TargetCopy[TargetLength] = L'\0';
|
||||
Result = gUnicodeCollation->StriColl (gUnicodeCollation, SourceCopy, TargetCopy);
|
||||
FreePool (SourceCopy);
|
||||
FreePool (TargetCopy);
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -280,16 +280,17 @@ VerifyIntermediateDirectories (
|
|||
);
|
||||
|
||||
/**
|
||||
CaseInsensitive length limited string comparison.
|
||||
String comparison without regard to case for a limited number of characters.
|
||||
|
||||
@param[in] Source Pointer to first string.
|
||||
@param[in] Target Pointer to second string.
|
||||
@param[in] Count Number of characters to compare.
|
||||
@param[in] Source The first item to compare.
|
||||
@param[in] Target The second item to compare.
|
||||
@param[in] Count How many characters to compare.
|
||||
|
||||
@retval 0 The strings are the same.
|
||||
@return non-zero if the strings are different.
|
||||
@retval 0 Source and Target are identical strings without regard to case.
|
||||
@retval !=0 Source is not identical to Target.
|
||||
|
||||
**/
|
||||
CONST CHAR16*
|
||||
INTN
|
||||
StrniCmp(
|
||||
IN CONST CHAR16 *Source,
|
||||
IN CONST CHAR16 *Target,
|
||||
|
|
Loading…
Reference in New Issue