/** @file\r
Main file for DmpStore shell Debug1 function.\r
-\r
+ \r
+ (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>\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
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_LOAD_BAD_FILE), gShellDebug1HiiHandle);\r
- Status = EFI_VOLUME_CORRUPTED;\r
+ if ((Position != FileSize) || (ShellStatus != SHELL_SUCCESS)) {\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_LOAD_BAD_FILE), gShellDebug1HiiHandle, L"dmpstore"); \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
Variable->Data\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
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_LOAD_GEN_FAIL), gShellDebug1HiiHandle, L"dmpstore", Variable->Name, Status); \r
}\r
}\r
}\r
FreePool (Variable);\r
}\r
\r
- return Status;\r
+ return ShellStatus;\r
}\r
\r
/**\r
FreePool (Buffer);\r
\r
if (!EFI_ERROR (Status) && \r
- (BufferSize != sizeof (NameSize) + sizeof (DataSize) + sizeof (*Guid) + sizeof (Attributes) + NameSize + DataSize)\r
+ (BufferSize != sizeof (NameSize) + sizeof (DataSize) + sizeof (*Guid) + sizeof (Attributes) + NameSize + DataSize + sizeof (UINT32))\r
) {\r
Status = EFI_DEVICE_ERROR;\r
}\r
FoundVarName = AllocateZeroPool (NameSize);\r
if (FoundVarName != NULL) {\r
if (PrevName != NULL) {\r
- StrCpy(FoundVarName, PrevName);\r
+ StrnCpy(FoundVarName, PrevName, NameSize/sizeof(CHAR16)-1);\r
}\r
\r
Status = gRT->GetNextVariableName (&NameSize, FoundVarName, &FoundVarGuid);\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
\r
if (!Found) {\r
if (ShellStatus == SHELL_OUT_OF_RESOURCES) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDebug1HiiHandle);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDebug1HiiHandle, L"dmpstore"); \r
return (ShellStatus);\r
} else if (Name != NULL && Guid == NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_N), gShellDebug1HiiHandle, Name);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_N), gShellDebug1HiiHandle, L"dmpstore", Name); \r
} else if (Name != NULL && Guid != NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_GN), gShellDebug1HiiHandle, Guid, Name);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_GN), gShellDebug1HiiHandle, L"dmpstore", Guid, Name); \r
} else if (Name == NULL && Guid == NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND), gShellDebug1HiiHandle);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND), gShellDebug1HiiHandle, L"dmpstore"); \r
} else if (Name == NULL && Guid != NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_G), gShellDebug1HiiHandle, Guid);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_G), gShellDebug1HiiHandle, L"dmpstore", Guid); \r
} \r
return (SHELL_NOT_FOUND);\r
}\r
Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);\r
if (EFI_ERROR(Status)) {\r
if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, ProblemParam);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"dmpstore", ProblemParam); \r
FreePool(ProblemParam);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
}\r
} else {\r
if (ShellCommandLineGetCount(Package) > 2) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"dmpstore"); \r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else if (ShellCommandLineGetFlag(Package, L"-all") && ShellCommandLineGetFlag(Package, L"-guid")) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDebug1HiiHandle, L"-all", L"-guid");\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDebug1HiiHandle, L"dmpstore", L"-all", L"-guid"); \r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else if (ShellCommandLineGetFlag(Package, L"-s") && ShellCommandLineGetFlag(Package, L"-l")) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDebug1HiiHandle, L"-l", L"-s");\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDebug1HiiHandle, L"dmpstore", L"-l", L"-s"); \r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else if ((ShellCommandLineGetFlag(Package, L"-s") || ShellCommandLineGetFlag(Package, L"-l")) && ShellCommandLineGetFlag(Package, L"-d")) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDebug1HiiHandle, L"-l or -s", L"-d");\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDebug1HiiHandle, L"dmpstore", 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
Status = ConvertStringToGuid(GuidStr, &GuidData);\r
if (EFI_ERROR(Status)) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, GuidStr);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dmpstore", GuidStr); \r
ShellStatus = SHELL_INVALID_PARAMETER;\r
}\r
Guid = &GuidData;\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
File = ShellCommandLineGetValue(Package, L"-s");\r
if (File == NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"-s");\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"dmpstore", L"-s"); \r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
Status = ShellOpenFileByName (File, &FileHandle, EFI_FILE_MODE_WRITE | EFI_FILE_MODE_READ, 0);\r
//\r
FileInfo = ShellGetFileInfo (FileHandle);\r
if (FileInfo == NULL) {\r
- ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, File);\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"dmpstore", File); \r
Status = EFI_DEVICE_ERROR;\r
} else {\r
if ((FileInfo->Attribute & EFI_FILE_DIRECTORY) == EFI_FILE_DIRECTORY) {\r
- ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_IS_DIRECTORY), gShellDebug1HiiHandle, File);\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_IS_DIRECTORY), gShellDebug1HiiHandle, L"dmpstore", File); \r
Status = EFI_INVALID_PARAMETER;\r
} else {\r
Status = ShellDeleteFile (&FileHandle);\r
if (EFI_ERROR (Status)) {\r
- ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_DELETE_FAIL), gShellDebug1HiiHandle, File);\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_DELETE_FAIL), gShellDebug1HiiHandle, L"dmpstore", File); \r
}\r
}\r
FreePool (FileInfo);\r
//\r
// Otherwise it's bad.\r
//\r
- ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, File);\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"dmpstore", File); \r
}\r
\r
if (!EFI_ERROR (Status)) {\r
Status = ShellOpenFileByName (File, &FileHandle, EFI_FILE_MODE_CREATE | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_READ, 0);\r
if (EFI_ERROR (Status)) {\r
- ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, File);\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"dmpstore", File); \r
}\r
}\r
\r
Type = DmpStoreLoad;\r
File = ShellCommandLineGetValue(Package, L"-l");\r
if (File == NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"-l");\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"dmpstore", L"-l"); \r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
Status = ShellOpenFileByName (File, &FileHandle, EFI_FILE_MODE_READ, 0);\r
if (EFI_ERROR (Status)) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, File);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"dmpstore", File); \r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
FileInfo = ShellGetFileInfo (FileHandle);\r
if (FileInfo == NULL) {\r
- ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, File);\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"dmpstore", File); \r
ShellStatus = SHELL_DEVICE_ERROR;\r
} else {\r
if ((FileInfo->Attribute & EFI_FILE_DIRECTORY) == EFI_FILE_DIRECTORY) {\r
- ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_IS_DIRECTORY), gShellDebug1HiiHandle, File);\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_IS_DIRECTORY), gShellDebug1HiiHandle, L"dmpstore", File); \r
ShellStatus = SHELL_INVALID_PARAMETER;\r
}\r
FreePool (FileInfo);\r