summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuiyu Ni <ruiyu.ni@intel.com>2017-06-01 22:09:14 +0800
committerGuo Mang <mang.guo@intel.com>2017-07-12 11:24:55 +0800
commit9972d95074e555e26f5ac431071a1068150d8fd3 (patch)
treefbd1cc8edc1bc376d751e2b69fdeb194b9ce4843
parente3bbdfb0832bd6c543df42363e783d1d1876595a (diff)
downloadedk2-platforms-9972d95074e555e26f5ac431071a1068150d8fd3.tar.xz
ShellPkg/alias: Fix bug to support upper-case alias
alias in UEFI Shell is case insensitive. Old code saves the alias to variable storage without converting the alias to lower-case, which results upper case alias setting doesn't work. The patch converts the alias to lower case before saving to variable storage. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Jaben Carsey <jaben.carsey@intel.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Tapan Shah <tapandshah@hpe.com> (cherry picked from commit 7ec69844b8f1d348c0699cc882222c728acb13ad)
-rw-r--r--Core/ShellPkg/Application/Shell/ShellProtocol.c50
1 files changed, 25 insertions, 25 deletions
diff --git a/Core/ShellPkg/Application/Shell/ShellProtocol.c b/Core/ShellPkg/Application/Shell/ShellProtocol.c
index 347e162e62..b3b8acc0d0 100644
--- a/Core/ShellPkg/Application/Shell/ShellProtocol.c
+++ b/Core/ShellPkg/Application/Shell/ShellProtocol.c
@@ -3463,40 +3463,40 @@ InternalSetAlias(
{
EFI_STATUS Status;
CHAR16 *AliasLower;
+ BOOLEAN DeleteAlias;
- // Convert to lowercase to make aliases case-insensitive
- if (Alias != NULL) {
- AliasLower = AllocateCopyPool (StrSize (Alias), Alias);
- if (AliasLower == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
- ToLower (AliasLower);
- } else {
- AliasLower = NULL;
- }
-
- //
- // We must be trying to remove one if Alias is NULL
- //
+ DeleteAlias = FALSE;
if (Alias == NULL) {
//
+ // We must be trying to remove one if Alias is NULL
// remove an alias (but passed in COMMAND parameter)
//
- Status = (gRT->SetVariable((CHAR16*)Command, &gShellAliasGuid, 0, 0, NULL));
- } else {
- //
- // Add and replace are the same
- //
-
- // We dont check the error return on purpose since the variable may not exist.
- gRT->SetVariable((CHAR16*)Command, &gShellAliasGuid, 0, 0, NULL);
+ Alias = Command;
+ DeleteAlias = TRUE;
+ }
+ ASSERT (Alias != NULL);
- Status = (gRT->SetVariable((CHAR16*)Alias, &gShellAliasGuid, EFI_VARIABLE_BOOTSERVICE_ACCESS|(Volatile?0:EFI_VARIABLE_NON_VOLATILE), StrSize(Command), (VOID*)Command));
+ //
+ // Convert to lowercase to make aliases case-insensitive
+ //
+ AliasLower = AllocateCopyPool (StrSize (Alias), Alias);
+ if (AliasLower == NULL) {
+ return EFI_OUT_OF_RESOURCES;
}
+ ToLower (AliasLower);
- if (Alias != NULL) {
- FreePool (AliasLower);
+ if (DeleteAlias) {
+ Status = gRT->SetVariable (AliasLower, &gShellAliasGuid, 0, 0, NULL);
+ } else {
+ Status = gRT->SetVariable (
+ AliasLower, &gShellAliasGuid,
+ EFI_VARIABLE_BOOTSERVICE_ACCESS | (Volatile ? 0 : EFI_VARIABLE_NON_VOLATILE),
+ StrSize (Command), (VOID *) Command
+ );
}
+
+ FreePool (AliasLower);
+
return Status;
}