/** @file\r
Main file for DmpStore shell Debug1 function.\r
-\r
+ \r
+ (C) Copyright 2013-2014, Hewlett-Packard Development Company, L.P.\r
Copyright (c) 2005 - 2014, 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
StrnCatGrow (&RetString, &BufLen, L"+NV", 0);\r
}\r
if ((Atts & EFI_VARIABLE_RUNTIME_ACCESS) != 0) {\r
- StrnCatGrow (&RetString, &BufLen, L"+RS+BS", 0);\r
+ StrnCatGrow (&RetString, &BufLen, L"+RT+BS", 0);\r
} else if ((Atts & EFI_VARIABLE_BOOTSERVICE_ACCESS) != 0) {\r
StrnCatGrow (&RetString, &BufLen, L"+BS", 0);\r
}\r
@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
ShellStatus = CascadeProcessVariables(Name, Guid, Type, FileHandle, FoundVarName, FoundVarGuid, FoundOne);\r
\r
+ if (ShellGetExecutionBreakFlag() || (ShellStatus == SHELL_ABORTED)) {\r
+ SHELL_FREE_NON_NULL(FoundVarName);\r
+ return (SHELL_ABORTED);\r
+ }\r
+\r
//\r
// No matter what happened we process our own variable\r
// Only continue if Guid and VariableName are each either NULL or a match\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
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDebug1HiiHandle, L"-l or -s", L"-d");\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
+ //\r
+ // Determine the GUID to search for based on -all and -guid parameters\r
+ //\r
if (!ShellCommandLineGetFlag(Package, L"-all")) {\r
GuidStr = ShellCommandLineGetValue(Package, L"-guid");\r
if (GuidStr != NULL) {\r
} else {\r
Guid = &gEfiGlobalVariableGuid;\r
}\r
- Name = ShellCommandLineGetRawValue(Package, 1);\r
} else {\r
- Name = NULL;\r
Guid = NULL;\r
}\r
+\r
+ //\r
+ // Get the Name of the variable to find\r
+ //\r
+ Name = ShellCommandLineGetRawValue(Package, 1);\r
+\r
if (ShellStatus == SHELL_SUCCESS) {\r
if (ShellCommandLineGetFlag(Package, L"-s")) {\r
Type = DmpStoreSave;\r