summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaben Carsey <jaben.carsey@intel.com>2014-10-02 16:41:28 +0000
committerjcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524>2014-10-02 16:41:28 +0000
commit475387e9de0bed70b57165d0a389f3aee97d4058 (patch)
tree62160d9e5c94412f863e403b07fe05d0362f7152
parent7fe3fbad05cd6ef23e83ab5da8c5a82ff9bb456e (diff)
ShellPkg: Update SetVar to use existing attributes for updating existing variables.tianocore-edk2-2014.10
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jaben Carsey <jaben.carsey@intel.com> Reviewed-by: Erik Bjorge <erik.c.bjorge@intel.com> Reviewed-by: Tapan Shah <tapandshah@hp.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16194 6f19259b-4bc3-4df7-8a09-765794883524
-rw-r--r--ShellPkg/Library/UefiShellDebug1CommandsLib/SetVar.c61
1 files changed, 35 insertions, 26 deletions
diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/SetVar.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/SetVar.c
index 9e57998ff..0749826b8 100644
--- a/ShellPkg/Library/UefiShellDebug1CommandsLib/SetVar.c
+++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/SetVar.c
@@ -1,7 +1,7 @@
/** @file
Main file for SetVar shell Debug1 function.
- Copyright (c) 2010 - 2013, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2010 - 2014, 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
@@ -44,7 +44,6 @@ ShellCommandRunSetVar (
EFI_GUID Guid;
CONST CHAR16 *StringGuid;
UINT32 Attributes;
- UINT32 Attributes2;
VOID *Buffer;
UINTN Size;
UINTN LoopVar;
@@ -98,7 +97,7 @@ ShellCommandRunSetVar (
ShellStatus = SHELL_INVALID_PARAMETER;
}
}
- if (Data == NULL) {
+ if (Data == NULL || Data[0] != L'=') {
//
// Display what's there
//
@@ -129,22 +128,43 @@ ShellCommandRunSetVar (
ASSERT(ShellStatus == SHELL_SUCCESS);
}
} else {
- if (Data[0] == L'=') {
- Data++;
- }
//
- // Change what's there
+ // Change what's there or create a new one.
//
- if (ShellCommandLineGetFlag(Package, L"-bs")) {
- Attributes |= EFI_VARIABLE_BOOTSERVICE_ACCESS;
- }
- if (ShellCommandLineGetFlag(Package, L"-rt")) {
- Attributes |= EFI_VARIABLE_RUNTIME_ACCESS |
- EFI_VARIABLE_BOOTSERVICE_ACCESS;
+
+ ASSERT(Data[0] == L'=');
+ Data++;
+
+ //
+ // Determine if the variable exists and get the attributes
+ //
+ Status = gRT->GetVariable((CHAR16*)VariableName, &Guid, &Attributes, &Size, Buffer);
+ if (Status == EFI_BUFFER_TOO_SMALL) {
+ Buffer = AllocateZeroPool(Size);
+ Status = gRT->GetVariable((CHAR16*)VariableName, &Guid, &Attributes, &Size, Buffer);
}
- if (ShellCommandLineGetFlag(Package, L"-nv")) {
- Attributes |= EFI_VARIABLE_NON_VOLATILE;
+
+ if (EFI_ERROR(Status) || Buffer == NULL) {
+ //
+ // Creating a new variable. determine attributes from command line.
+ //
+ Attributes = 0;
+ if (ShellCommandLineGetFlag(Package, L"-bs")) {
+ Attributes |= EFI_VARIABLE_BOOTSERVICE_ACCESS;
+ }
+ if (ShellCommandLineGetFlag(Package, L"-rt")) {
+ Attributes |= EFI_VARIABLE_RUNTIME_ACCESS |
+ EFI_VARIABLE_BOOTSERVICE_ACCESS;
+ }
+ if (ShellCommandLineGetFlag(Package, L"-nv")) {
+ Attributes |= EFI_VARIABLE_NON_VOLATILE;
+ }
}
+ SHELL_FREE_NON_NULL(Buffer);
+
+ //
+ // What type is the new data.
+ //
if (ShellIsHexOrDecimalNumber(Data, TRUE, FALSE)) {
if (StrLen(Data) % 2 != 0) {
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellDebug1HiiHandle, Data);
@@ -171,17 +191,6 @@ ShellCommandRunSetVar (
}
}
} else if (StrnCmp(Data, L"\"", 1) == 0) {
- Size = 0;
- Attributes2 = 0;
- Status = gRT->GetVariable((CHAR16*)VariableName, &Guid, &Attributes2, &Size, Buffer);
- if (Status == EFI_BUFFER_TOO_SMALL) {
- Buffer = AllocateZeroPool(Size);
- Status = gRT->GetVariable((CHAR16*)VariableName, &Guid, &Attributes2, &Size, Buffer);
- if (Buffer != NULL) {
- FreePool(Buffer);
- }
- Attributes = Attributes2;
- }
//
// ascii text
//