CONST CHAR16 *OptData;\r
} BGFG_OPERATION;\r
\r
+/**\r
+ Get the actual number of entries in EFI_KEY_OPTION.Keys, from 0-3.\r
+\r
+ @param KeyOption Pointer to the EFI_KEY_OPTION structure. \r
+\r
+ @return Actual number of entries in EFI_KEY_OPTION.Keys.\r
+**/\r
+#define KEY_OPTION_INPUT_KEY_COUNT(KeyOption) \\r
+ (((KeyOption)->KeyData & EFI_KEY_OPTION_INPUT_KEY_COUNT_MASK) >> LowBitSet32 (EFI_KEY_OPTION_INPUT_KEY_COUNT_MASK))\r
+\r
/**\r
Update the optional data for a boot or driver option.\r
\r
//\r
// Allocate new struct and discard old optional data.\r
//\r
+ ASSERT (OriginalData != NULL);\r
OriginalOptionDataSize = sizeof(UINT32) + sizeof(UINT16) + StrSize(((CHAR16*)(OriginalData + sizeof(UINT32) + sizeof(UINT16))));\r
OriginalOptionDataSize += (*(UINT16*)(OriginalData + sizeof(UINT32)));\r
OriginalOptionDataSize -= OriginalSize;\r
/**\r
This function will get a CRC for a boot option.\r
\r
- @param[in, out] Crc The CRC value to return.\r
- @param[in] Index The boot option index to CRC.\r
+ @param[in, out] Crc The CRC value to return.\r
+ @param[in] BootIndex The boot option index to CRC.\r
\r
@retval EFI_SUCCESS The CRC was sucessfully returned.\r
@retval other A error occured.\r
EFI_STATUS Status;\r
EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
EFI_DEVICE_PATH_PROTOCOL *FilePath;\r
- EFI_DEVICE_PATH_PROTOCOL *FileNode;\r
+ /* EFI_DEVICE_PATH_PROTOCOL *FileNode; */\r
CHAR16 *Str;\r
UINT8 *TempByteBuffer;\r
UINT8 *TempByteStart;\r
\r
Str = NULL;\r
FilePath = NULL;\r
- FileNode = NULL;\r
+ /* FileNode = NULL; */\r
FileList = NULL;\r
Handles = NULL;\r
ShellStatus = SHELL_SUCCESS;\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
FileName = StrnCatGrow(&FileName, NULL, Walker+1, 0);\r
+ if (FileName == NULL) {\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDebug1HiiHandle);\r
+ ShellStatus = SHELL_OUT_OF_RESOURCES;\r
+ return (ShellStatus);\r
+ }\r
Temp2 = StrStr(FileName, L"\"");\r
ASSERT(Temp2 != NULL);\r
Temp2[0] = CHAR_NULL;\r
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Walker);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
}\r
- NewKeyOption.KeyData.PackedValue = (UINT32)Intermediate;\r
+ NewKeyOption.KeyData = (UINT32)Intermediate;\r
Temp = StrStr(Walker, L" ");\r
if (Temp != NULL) {\r
Walker = Temp;\r
// Now we know how many EFI_INPUT_KEY structs we need to attach to the end of the EFI_KEY_OPTION struct. \r
// Re-allocate with the added information.\r
//\r
- KeyOptionBuffer = AllocateCopyPool(sizeof(EFI_KEY_OPTION) + (sizeof(EFI_KEY_DATA) * NewKeyOption.KeyData.Options.InputKeyCount), &NewKeyOption);\r
+ KeyOptionBuffer = AllocateCopyPool(sizeof(EFI_KEY_OPTION) + (sizeof(EFI_KEY_DATA) * KEY_OPTION_INPUT_KEY_COUNT (&NewKeyOption)), &NewKeyOption);\r
if (KeyOptionBuffer == NULL) {\r
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_MEM), gShellDebug1HiiHandle);\r
ShellStatus = SHELL_OUT_OF_RESOURCES;\r
}\r
}\r
- for (LoopCounter = 0 ; ShellStatus == SHELL_SUCCESS && LoopCounter < KeyOptionBuffer->KeyData.Options.InputKeyCount; LoopCounter++) {\r
+ for (LoopCounter = 0 ; ShellStatus == SHELL_SUCCESS && LoopCounter < KEY_OPTION_INPUT_KEY_COUNT (&NewKeyOption); LoopCounter++) {\r
//\r
// ScanCode\r
//\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_KEY_DATA) * NewKeyOption.KeyData.Options.InputKeyCount),\r
+ sizeof(EFI_KEY_OPTION) + (sizeof(EFI_KEY_DATA) * KEY_OPTION_INPUT_KEY_COUNT (&NewKeyOption)),\r
KeyOptionBuffer);\r
if (EFI_ERROR(Status)) {\r
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_SET_VAR_FAIL), gShellDebug1HiiHandle, VariableName, Status);\r
//\r
// Open the file and populate the data buffer.\r
//\r
- ShellStatus = ShellOpenFileByName(\r
+ Status = ShellOpenFileByName(\r
FileName,\r
&FileHandle,\r
EFI_FILE_MODE_READ,\r
0);\r
- if (ShellStatus == SHELL_SUCCESS) {\r
- ShellStatus = ShellGetFileSize(FileHandle, &Intermediate);\r
+ if (!EFI_ERROR(Status)) {\r
+ Status = ShellGetFileSize(FileHandle, &Intermediate);\r
}\r
Data = AllocateZeroPool((UINTN)Intermediate);\r
if (Data == NULL) {\r
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_MEM), gShellDebug1HiiHandle);\r
ShellStatus = SHELL_OUT_OF_RESOURCES;\r
}\r
- if (ShellStatus == SHELL_SUCCESS) {\r
- ShellStatus = ShellReadFile(FileHandle, (UINTN *)&Intermediate, Data);\r
+ if (!EFI_ERROR(Status)) {\r
+ Status = ShellReadFile(FileHandle, (UINTN *)&Intermediate, Data);\r
}\r
} else {\r
Intermediate = StrSize(Data);\r
}\r
\r
- if (ShellStatus == SHELL_SUCCESS && Data != NULL) {\r
+ if (!EFI_ERROR(Status) && ShellStatus == SHELL_SUCCESS && Data != NULL) {\r
Status = UpdateOptionalDataDebug1(CurrentOrder[OptionIndex], (UINTN)Intermediate, (UINT8*)Data, Target);\r
if (EFI_ERROR(Status)) {\r
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_SET_VAR_FAIL), gShellDebug1HiiHandle, VariableName, Status);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} \r
}\r
+ if (EFI_ERROR(Status) && ShellStatus == SHELL_SUCCESS) {\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_SET_VAR_FAIL), gShellDebug1HiiHandle, VariableName, Status);\r
+ ShellStatus = SHELL_INVALID_PARAMETER;\r
+ } \r
}\r
\r
SHELL_FREE_NON_NULL(Data);\r