]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellDebug1CommandsLib/Bcfg.c
Fix GCC build failure.
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / Bcfg.c
index fed38564e93c3941cd7ed9f974cf9727ba2266d3..73831d267e1cbf249ef9760e94351ee90c01d6b7 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file for bcfg shell Debug1 function.\r
 \r
-  Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2013, Intel Corporation. All rights reserved.<BR>\r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
   which accompanies this distribution.  The full text of the license may be found at\r
@@ -47,6 +47,16 @@ typedef struct {
   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
@@ -107,6 +117,7 @@ UpdateOptionalDataDebug1(
     //\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
@@ -139,8 +150,8 @@ UpdateOptionalDataDebug1(
 /**\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
@@ -282,7 +293,7 @@ BcfgAddDebug1(
   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
@@ -317,7 +328,7 @@ BcfgAddDebug1(
 \r
   Str             = NULL;\r
   FilePath        = NULL;\r
-  FileNode        = NULL;\r
+  /* FileNode        = NULL; */\r
   FileList        = NULL;\r
   Handles         = NULL;\r
   ShellStatus     = SHELL_SUCCESS;\r
@@ -514,6 +525,7 @@ BcfgAddDebug1(
 \r
       CopyMem (TempByteBuffer, Desc, DescSize);\r
       TempByteBuffer += DescSize;\r
+      ASSERT (FilePath != NULL);\r
       CopyMem (TempByteBuffer, FilePath, FilePathSize);\r
 \r
       UnicodeSPrint (OptionStr, sizeof(OptionStr), L"%s%04x", Target == BcfgTargetBootOrder?L"Boot":L"Driver", TargetLocation);\r
@@ -779,6 +791,11 @@ BcfgAddOptDebug1(
       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
@@ -826,7 +843,7 @@ BcfgAddOptDebug1(
           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
@@ -841,13 +858,13 @@ BcfgAddOptDebug1(
         // 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
@@ -913,7 +930,7 @@ BcfgAddOptDebug1(
           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
@@ -934,33 +951,37 @@ BcfgAddOptDebug1(
       //\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
@@ -1032,7 +1053,7 @@ BcfgDisplayDumpDebug1(
     if ((*(UINT16*)(Buffer+4)) != 0) {\r
       DevPath = AllocateZeroPool(*(UINT16*)(Buffer+4));\r
       CopyMem(DevPath, Buffer+6+StrSize((CHAR16*)(Buffer+6)), *(UINT16*)(Buffer+4));\r
-      DevPathString = gDevPathToText->ConvertDevicePathToText(DevPath, TRUE, FALSE);\r
+      DevPathString = ConvertDevicePathToText(DevPath, TRUE, FALSE);\r
     } else {\r
       DevPath       = NULL;\r
       DevPathString = NULL;\r