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:
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
|
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
|
||||||
(C) Copyright 2015 Hewlett-Packard Development Company, L.P.<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
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
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)) {
|
if (((UINTN) Splitter1 - (UINTN) FullPath) != ((UINTN) Splitter2 - (UINTN) Cwd)) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
} else {
|
} 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;
|
return TRUE;
|
||||||
} else {
|
} else {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Main file for cp shell level 2 function.
|
Main file for cp shell level 2 function.
|
||||||
|
|
||||||
(C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
|
(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
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
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))
|
if ( !EFI_ERROR(ShellIsDirectory(Node->FullName))
|
||||||
&& !EFI_ERROR(ShellIsDirectory(DestPath))
|
&& !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");
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CP_SD_PARENT), gShellLevel2HiiHandle, L"cp");
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
Main file for time, timezone, and date shell level 2 and shell level 3 functions.
|
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>
|
(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
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -550,7 +550,7 @@ ShellCommandRunTime (
|
|||||||
// perform level 3 operation here.
|
// perform level 3 operation here.
|
||||||
//
|
//
|
||||||
if ((TempLocation = ShellCommandLineGetValue(Package, L"-tz")) != NULL) {
|
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;
|
Tz = EFI_UNSPECIFIED_TIMEZONE;
|
||||||
} else if (TempLocation[0] == L'-') {
|
} else if (TempLocation[0] == L'-') {
|
||||||
|
|
||||||
@ -713,7 +713,7 @@ CheckAndSetTimeZone (
|
|||||||
return (SHELL_INVALID_PARAMETER);
|
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);
|
Status = gRT->GetTime (&TheTime, NULL);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_UEFI_FUNC_WARN), gShellLevel2HiiHandle, L"gRT->GetTime", 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
|
* functions are non-interactive only
|
||||||
|
|
||||||
Copyright (c) 2014 Hewlett-Packard Development Company, L.P.
|
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
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -260,19 +260,6 @@ VerifyIntermediateDirectories (
|
|||||||
return (Status);
|
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.
|
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] Target The second item to compare.
|
||||||
@param[in] Count How many characters to compare.
|
@param[in] Count How many characters to compare.
|
||||||
|
|
||||||
@retval NULL Source and Target are identical strings without regard to case.
|
@retval 0 Source and Target are identical strings without regard to case.
|
||||||
@return The location in Source where there is a difference.
|
@retval !=0 Source is not identical to Target.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
CONST CHAR16*
|
INTN
|
||||||
StrniCmp(
|
StrniCmp(
|
||||||
IN CONST CHAR16 *Source,
|
IN CONST CHAR16 *Source,
|
||||||
IN CONST CHAR16 *Target,
|
IN CONST CHAR16 *Target,
|
||||||
IN CONST UINTN Count
|
IN CONST UINTN Count
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN LoopCount;
|
CHAR16 *SourceCopy;
|
||||||
CHAR16 Char1;
|
CHAR16 *TargetCopy;
|
||||||
CHAR16 Char2;
|
UINTN SourceLength;
|
||||||
|
UINTN TargetLength;
|
||||||
|
INTN Result;
|
||||||
|
|
||||||
ASSERT(Source != NULL);
|
if (Count == 0) {
|
||||||
ASSERT(Target != NULL);
|
return 0;
|
||||||
|
|
||||||
for (LoopCount = 0 ; LoopCount < Count ; LoopCount++) {
|
|
||||||
Char1 = InternalCharToUpper(Source[LoopCount]);
|
|
||||||
Char2 = InternalCharToUpper(Target[LoopCount]);
|
|
||||||
if (Char1 != Char2) {
|
|
||||||
return (&Source[LoopCount]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
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] Source The first item to compare.
|
||||||
@param[in] Target Pointer to second string.
|
@param[in] Target The second item to compare.
|
||||||
@param[in] Count Number of characters to compare.
|
@param[in] Count How many characters to compare.
|
||||||
|
|
||||||
@retval 0 The strings are the same.
|
@retval 0 Source and Target are identical strings without regard to case.
|
||||||
@return non-zero if the strings are different.
|
@retval !=0 Source is not identical to Target.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
CONST CHAR16*
|
INTN
|
||||||
StrniCmp(
|
StrniCmp(
|
||||||
IN CONST CHAR16 *Source,
|
IN CONST CHAR16 *Source,
|
||||||
IN CONST CHAR16 *Target,
|
IN CONST CHAR16 *Target,
|
||||||
|
Reference in New Issue
Block a user