]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ShellPkg: Fix setting hot key for boot option fail.
authorQiu Shumin <shumin.qiu@intel.com>
Tue, 23 Sep 2014 01:14:30 +0000 (01:14 +0000)
committershenshushi <shenshushi@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 23 Sep 2014 01:14:30 +0000 (01:14 +0000)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Qiu Shumin <shumin.qiu@intel.com>
Reviewed-by: Jaben Carsey <Jaben.carsey@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16159 6f19259b-4bc3-4df7-8a09-765794883524

ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.c
ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.uni

index 28f05eb1de60a7862400f178d76740b0d1d17ac5..33c247093814884e7c342e8793c89040d5bb664e 100644 (file)
@@ -768,8 +768,9 @@ BcfgAddOpt(
   CHAR16          *FileName;\r
   CHAR16          *Temp2;\r
   CHAR16          *Data;\r
-  UINT16          KeyIndex;\r
+  UINT32          KeyIndex;\r
   CHAR16          VariableName[12];\r
+  UINT8           *VariableData;\r
 \r
   SHELL_FILE_HANDLE FileHandle;\r
 \r
@@ -779,8 +780,10 @@ BcfgAddOpt(
   FileName        = NULL;\r
   Data            = NULL;\r
   KeyOptionBuffer = NULL;\r
+  VariableData    = NULL;\r
 \r
   ZeroMem(&NewKeyOption, sizeof(EFI_KEY_OPTION));\r
+  ZeroMem(VariableName, sizeof(VariableName));\r
 \r
   while(Walker[0] == L' ') {\r
     Walker++;\r
@@ -941,28 +944,31 @@ BcfgAddOpt(
       }\r
 \r
       if (ShellStatus == SHELL_SUCCESS) {\r
-        for (Temp2 = NULL, KeyIndex = 0 ; KeyIndex < 0xFFFF ; KeyIndex++) {\r
+        for (Temp2 = NULL, KeyIndex = 0 ; KeyIndex <= 0xFFFF ; KeyIndex++) {\r
           UnicodeSPrint(VariableName, sizeof(VariableName), L"Key%04x", KeyIndex);\r
-          Status = gRT->GetVariable(\r
-              VariableName,\r
-              (EFI_GUID*)&gEfiGlobalVariableGuid,\r
-              NULL,\r
-              (UINTN*)&Intermediate,\r
-              NULL);\r
+          Status = GetEfiGlobalVariable2 (VariableName, &VariableData, NULL);\r
           if (Status == EFI_NOT_FOUND) {\r
             break;\r
           }\r
+          if (!EFI_ERROR(Status)) {\r
+            SHELL_FREE_NON_NULL(VariableData);\r
+          }\r
         }\r
-        Status = gRT->SetVariable(\r
-          VariableName,\r
-          (EFI_GUID*)&gEfiGlobalVariableGuid,\r
-          EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS,\r
-          sizeof(EFI_KEY_OPTION) + (sizeof(EFI_INPUT_KEY) * NewKeyOption.KeyData.Options.InputKeyCount),\r
-          KeyOptionBuffer);\r
-        if (EFI_ERROR(Status)) {\r
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_SET_VAR_FAIL), gShellBcfgHiiHandle, VariableName, Status);\r
+        if (KeyIndex <= 0xFFFF) {\r
+          Status = gRT->SetVariable(\r
+            VariableName,\r
+            (EFI_GUID*)&gEfiGlobalVariableGuid,\r
+            EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS,\r
+            sizeof(EFI_KEY_OPTION) + (sizeof(EFI_INPUT_KEY) * NewKeyOption.KeyData.Options.InputKeyCount),\r
+            KeyOptionBuffer);\r
+          if (EFI_ERROR(Status)) {\r
+            ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_SET_VAR_FAIL), gShellBcfgHiiHandle, VariableName, Status);\r
+            ShellStatus = SHELL_INVALID_PARAMETER;\r
+          }   \r
+        } else {\r
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_VAR_NO_NUM), gShellBcfgHiiHandle);\r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
-        }   \r
+        }\r
         ASSERT(FileName == NULL && Data == NULL);\r
       }\r
     }\r
index 2a3c232dfca48d68dbbddb2480d2e7d80ab7bf56..3b80bdc4419f17f47d1e7086d8021002f771744f 100644 (file)
Binary files a/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.uni and b/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.uni differ