From 77eef0d5a82bf2a49cc6bb25077ba73e922ea160 Mon Sep 17 00:00:00 2001 From: Qiu Shumin Date: Tue, 23 Sep 2014 01:14:30 +0000 Subject: [PATCH] ShellPkg: Fix setting hot key for boot option fail. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Qiu Shumin Reviewed-by: Jaben Carsey git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16159 6f19259b-4bc3-4df7-8a09-765794883524 --- .../UefiShellBcfgCommandLib.c | 40 ++++++++++-------- .../UefiShellBcfgCommandLib.uni | Bin 17972 -> 18278 bytes 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.c b/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.c index 28f05eb1de..33c2470938 100644 --- a/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.c +++ b/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.c @@ -768,8 +768,9 @@ BcfgAddOpt( CHAR16 *FileName; CHAR16 *Temp2; CHAR16 *Data; - UINT16 KeyIndex; + UINT32 KeyIndex; CHAR16 VariableName[12]; + UINT8 *VariableData; SHELL_FILE_HANDLE FileHandle; @@ -779,8 +780,10 @@ BcfgAddOpt( FileName = NULL; Data = NULL; KeyOptionBuffer = NULL; + VariableData = NULL; ZeroMem(&NewKeyOption, sizeof(EFI_KEY_OPTION)); + ZeroMem(VariableName, sizeof(VariableName)); while(Walker[0] == L' ') { Walker++; @@ -941,28 +944,31 @@ BcfgAddOpt( } if (ShellStatus == SHELL_SUCCESS) { - for (Temp2 = NULL, KeyIndex = 0 ; KeyIndex < 0xFFFF ; KeyIndex++) { + for (Temp2 = NULL, KeyIndex = 0 ; KeyIndex <= 0xFFFF ; KeyIndex++) { UnicodeSPrint(VariableName, sizeof(VariableName), L"Key%04x", KeyIndex); - Status = gRT->GetVariable( - VariableName, - (EFI_GUID*)&gEfiGlobalVariableGuid, - NULL, - (UINTN*)&Intermediate, - NULL); + Status = GetEfiGlobalVariable2 (VariableName, &VariableData, NULL); if (Status == EFI_NOT_FOUND) { break; } + if (!EFI_ERROR(Status)) { + SHELL_FREE_NON_NULL(VariableData); + } } - Status = gRT->SetVariable( - VariableName, - (EFI_GUID*)&gEfiGlobalVariableGuid, - EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS, - sizeof(EFI_KEY_OPTION) + (sizeof(EFI_INPUT_KEY) * NewKeyOption.KeyData.Options.InputKeyCount), - KeyOptionBuffer); - if (EFI_ERROR(Status)) { - ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_SET_VAR_FAIL), gShellBcfgHiiHandle, VariableName, Status); + if (KeyIndex <= 0xFFFF) { + Status = gRT->SetVariable( + VariableName, + (EFI_GUID*)&gEfiGlobalVariableGuid, + EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS, + sizeof(EFI_KEY_OPTION) + (sizeof(EFI_INPUT_KEY) * NewKeyOption.KeyData.Options.InputKeyCount), + KeyOptionBuffer); + if (EFI_ERROR(Status)) { + ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_SET_VAR_FAIL), gShellBcfgHiiHandle, VariableName, Status); + ShellStatus = SHELL_INVALID_PARAMETER; + } + } else { + ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_VAR_NO_NUM), gShellBcfgHiiHandle); ShellStatus = SHELL_INVALID_PARAMETER; - } + } ASSERT(FileName == NULL && Data == NULL); } } diff --git a/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.uni b/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.uni index 2a3c232dfca48d68dbbddb2480d2e7d80ab7bf56..3b80bdc4419f17f47d1e7086d8021002f771744f 100644 GIT binary patch delta 181 zcmdne!}zR^al#!&lZ|&gYRTVHg`>DhD3%uAk1edVNhU5 zW+-Av1&WjaNd*RPAX&+v41tp!t%NzPfTE5JISe_I-)o6`76W-{KppuExj>cyLj@2+ tpaO#~RK$$|0u>lCfaaEg%}oN5sX#jw7)lw6fvl9tjC{tMlSD5W001O6B+&o> delta 19 bcmaFX$GD}3al#!&qm6f4MK(_nyJP?WTXYEA -- 2.39.2