@param[in] Guid The guid of the variables to be loaded.\r
@param[out] Found TRUE when at least one variable was loaded and set.\r
\r
- @retval EFI_VOLUME_CORRUPTED The file is in bad format.\r
- @retval EFI_OUT_OF_RESOURCES There is not enough memory to perform the operation.\r
- @retval EFI_SUCCESS Successfully load and set the variables.\r
+ @retval SHELL_DEVICE_ERROR Cannot access the file.\r
+ @retval SHELL_VOLUME_CORRUPTED The file is in bad format.\r
+ @retval SHELL_OUT_OF_RESOURCES There is not enough memory to perform the operation.\r
+ @retval SHELL_SUCCESS Successfully load and set the variables.\r
**/\r
-EFI_STATUS\r
+SHELL_STATUS\r
LoadVariablesFromFile (\r
IN SHELL_FILE_HANDLE FileHandle,\r
IN CONST CHAR16 *Name,\r
)\r
{\r
EFI_STATUS Status;\r
+ SHELL_STATUS ShellStatus;\r
UINT32 NameSize;\r
UINT32 DataSize;\r
UINTN BufferSize;\r
\r
Status = ShellGetFileSize (FileHandle, &FileSize);\r
if (EFI_ERROR (Status)) {\r
- return Status;\r
+ return SHELL_DEVICE_ERROR;\r
}\r
-\r
+ \r
+ ShellStatus = SHELL_SUCCESS;\r
+ \r
InitializeListHead (&List);\r
\r
Position = 0;\r
BufferSize = sizeof (NameSize);\r
Status = ShellReadFile (FileHandle, &BufferSize, &NameSize);\r
if (EFI_ERROR (Status) || (BufferSize != sizeof (NameSize))) {\r
- Status = EFI_VOLUME_CORRUPTED;\r
+ ShellStatus = SHELL_VOLUME_CORRUPTED;\r
break;\r
}\r
\r
BufferSize = sizeof (DataSize);\r
Status = ShellReadFile (FileHandle, &BufferSize, &DataSize);\r
if (EFI_ERROR (Status) || (BufferSize != sizeof (DataSize))) {\r
- Status = EFI_VOLUME_CORRUPTED;\r
+ ShellStatus = SHELL_VOLUME_CORRUPTED;\r
break;\r
}\r
\r
BufferSize = sizeof (NameSize) + sizeof (DataSize) + RemainingSize;\r
Buffer = AllocatePool (BufferSize);\r
if (Buffer == NULL) {\r
- Status = EFI_OUT_OF_RESOURCES;\r
+ ShellStatus = SHELL_OUT_OF_RESOURCES;\r
break;\r
}\r
BufferSize = RemainingSize;\r
Status = ShellReadFile (FileHandle, &BufferSize, (UINT32 *) Buffer + 2);\r
if (EFI_ERROR (Status) || (BufferSize != RemainingSize)) {\r
- Status = EFI_VOLUME_CORRUPTED;\r
+ ShellStatus = SHELL_VOLUME_CORRUPTED;\r
FreePool (Buffer);\r
break;\r
}\r
);\r
if (Crc32 != * (UINT32 *) (Buffer + BufferSize)) {\r
FreePool (Buffer);\r
- Status = EFI_VOLUME_CORRUPTED;\r
+ ShellStatus = SHELL_VOLUME_CORRUPTED;\r
break;\r
}\r
\r
Variable = AllocateZeroPool (sizeof (*Variable) + NameSize + DataSize);\r
if (Variable == NULL) {\r
FreePool (Buffer);\r
- Status = EFI_OUT_OF_RESOURCES;\r
+ ShellStatus = SHELL_OUT_OF_RESOURCES;\r
break;\r
}\r
Variable->Signature = DMP_STORE_VARIABLE_SIGNATURE;\r
FreePool (Buffer);\r
}\r
\r
- if ((Position != FileSize) || EFI_ERROR (Status)) {\r
+ if ((Position != FileSize) || (ShellStatus != SHELL_SUCCESS)) {\r
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_LOAD_BAD_FILE), gShellDebug1HiiHandle);\r
- Status = EFI_VOLUME_CORRUPTED;\r
+ if (Position != FileSize) {\r
+ ShellStatus = SHELL_VOLUME_CORRUPTED;\r
+ }\r
}\r
\r
for ( Link = GetFirstNode (&List)\r
- ; !IsNull (&List, Link) && !EFI_ERROR (Status)\r
+ ; !IsNull (&List, Link) && (ShellStatus == SHELL_SUCCESS)\r
; Link = GetNextNode (&List, Link)\r
) {\r
Variable = CR (Link, DMP_STORE_VARIABLE, Link, DMP_STORE_VARIABLE_SIGNATURE);\r
);\r
if (EFI_ERROR (Status)) {\r
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_LOAD_GEN_FAIL), gShellDebug1HiiHandle, Variable->Name, Status);\r
- //\r
- // continue set variable upon failure\r
- //\r
- Status = EFI_SUCCESS;\r
}\r
}\r
}\r
FreePool (Variable);\r
}\r
\r
- return Status;\r
+ return ShellStatus;\r
}\r
\r
/**\r
//\r
// Last error check then print this variable out.\r
//\r
- if (!EFI_ERROR(Status) && DataBuffer != NULL) {\r
+ if (!EFI_ERROR(Status) && (DataBuffer != NULL) && (FoundVarName != NULL)) {\r
RetString = GetAttrType(Atts);\r
ShellPrintHiiEx(\r
-1,\r
ZeroMem (&FoundVarGuid, sizeof(EFI_GUID));\r
\r
if (Type == DmpStoreLoad) {\r
- ShellStatus = (SHELL_STATUS) LoadVariablesFromFile (FileHandle, Name, Guid, &Found);\r
+ ShellStatus = LoadVariablesFromFile (FileHandle, Name, Guid, &Found);\r
} else {\r
ShellStatus = CascadeProcessVariables(Name, Guid, Type, FileHandle, NULL, FoundVarGuid, &Found);\r
}\r