EFI_SHELL_PARAMETERS_PROTOCOL *mEfiShellParametersProtocol;\r
EFI_HANDLE mEfiShellEnvironment2Handle;\r
FILE_HANDLE_FUNCTION_MAP FileFunctionMap;\r
-CHAR16 *mPostReplaceFormat;\r
-CHAR16 *mPostReplaceFormat2;\r
\r
/**\r
Check if a Unicode character is a hexadecimal character.\r
)\r
{\r
EFI_STATUS Status;\r
- mPostReplaceFormat = AllocateZeroPool (PcdGet16 (PcdShellPrintBufferSize));\r
- ASSERT (mPostReplaceFormat != NULL);\r
- mPostReplaceFormat2 = AllocateZeroPool (PcdGet16 (PcdShellPrintBufferSize));\r
- ASSERT (mPostReplaceFormat2 != NULL);\r
\r
//\r
// UEFI 2.0 shell interfaces (used preferentially)\r
mEfiShellParametersProtocol = NULL;\r
mEfiShellInterface = NULL;\r
mEfiShellEnvironment2Handle = NULL;\r
- mPostReplaceFormat = NULL;\r
- mPostReplaceFormat2 = NULL;\r
\r
//\r
// verify that auto initialize is not set false\r
}\r
mEfiShellEnvironment2Handle = NULL;\r
\r
- if (mPostReplaceFormat != NULL) {\r
- FreePool(mPostReplaceFormat);\r
- }\r
- if (mPostReplaceFormat2 != NULL) {\r
- FreePool(mPostReplaceFormat2);\r
- }\r
- mPostReplaceFormat = NULL;\r
- mPostReplaceFormat2 = NULL;\r
-\r
return (EFI_SUCCESS);\r
}\r
\r
EFI_FILE_PROTOCOL *Handle1;\r
EFI_FILE_PROTOCOL *Handle2;\r
\r
- //\r
- // ASERT for FileHandle, FilePath, and DeviceHandle being NULL\r
- //\r
- ASSERT(FilePath != NULL);\r
- ASSERT(FileHandle != NULL);\r
- ASSERT(DeviceHandle != NULL);\r
+ if (FilePath == NULL || FileHandle == NULL || DeviceHandle == NULL) {\r
+ return (EFI_INVALID_PARAMETER);\r
+ }\r
+\r
//\r
// which shell interface should we use\r
//\r
otherwise, the Filehandle is NULL. The Attributes is valid only for\r
EFI_FILE_MODE_CREATE.\r
\r
- if FileNAme is NULL then ASSERT()\r
+ if FileName is NULL then ASSERT()\r
\r
@param FileName pointer to file name\r
@param FileHandle pointer to the file handle.\r
//\r
// using EFI Shell; call the function to check\r
//\r
- ASSERT(mEfiShellEnvironment2 != NULL);\r
- return (mEfiShellEnvironment2->GetExecutionBreak());\r
+ if (mEfiShellEnvironment2 != NULL) {\r
+ return (mEfiShellEnvironment2->GetExecutionBreak());\r
+ }\r
+\r
+ return (FALSE);\r
}\r
/**\r
return the value of an environment variable\r
}\r
\r
//\r
- // ASSERT that we must have EFI shell\r
+ // Check for EFI shell\r
//\r
- ASSERT(mEfiShellEnvironment2 != NULL);\r
+ if (mEfiShellEnvironment2 != NULL) {\r
+ return (mEfiShellEnvironment2->GetEnv((CHAR16*)EnvKey));\r
+ }\r
\r
- //\r
- // using EFI Shell\r
- //\r
- return (mEfiShellEnvironment2->GetEnv((CHAR16*)EnvKey));\r
+ return NULL;\r
}\r
/**\r
set the value of an environment variable\r
EnvironmentVariables,\r
Status));\r
}\r
+\r
//\r
- // ASSERT that we must have EFI shell\r
- //\r
- ASSERT(mEfiShellEnvironment2 != NULL);\r
- //\r
- // Call EFI Shell version (not using EnvironmentVariables or Status parameters)\r
- // Due to oddity in the EFI shell we want to dereference the ParentHandle here\r
+ // Check for EFI shell\r
//\r
- return (mEfiShellEnvironment2->Execute(*ParentHandle,\r
- CommandLine,\r
- Output));\r
+ if (mEfiShellEnvironment2 != NULL) {\r
+ //\r
+ // Call EFI Shell version (not using EnvironmentVariables or Status parameters)\r
+ // Due to oddity in the EFI shell we want to dereference the ParentHandle here\r
+ //\r
+ return (mEfiShellEnvironment2->Execute(*ParentHandle,\r
+ CommandLine,\r
+ Output));\r
+ }\r
+\r
+ return (EFI_UNSUPPORTED);\r
}\r
/**\r
Retreives the current directory path\r
if (mEfiShellProtocol != NULL) {\r
return (mEfiShellProtocol->GetCurDir(DeviceName));\r
}\r
+\r
//\r
- // ASSERT that we must have EFI shell\r
+ // Check for EFI shell\r
//\r
- ASSERT(mEfiShellEnvironment2 != NULL);\r
- return (mEfiShellEnvironment2->CurDir(DeviceName));\r
+ if (mEfiShellEnvironment2 != NULL) {\r
+ return (mEfiShellEnvironment2->CurDir(DeviceName));\r
+ }\r
+\r
+ return (NULL);\r
}\r
/**\r
sets (enabled or disabled) the page break mode\r
return;\r
} else {\r
//\r
- // ASSERT that must have EFI Shell\r
- //\r
- ASSERT(mEfiShellEnvironment2 != NULL);\r
+ // Check for EFI shell\r
//\r
- // Enable with EFI Shell\r
- //\r
- mEfiShellEnvironment2->EnablePageBreak (DEFAULT_INIT_ROW, DEFAULT_AUTO_LF);\r
- return;\r
+ if (mEfiShellEnvironment2 != NULL) {\r
+ //\r
+ // Enable with EFI Shell\r
+ //\r
+ mEfiShellEnvironment2->EnablePageBreak (DEFAULT_INIT_ROW, DEFAULT_AUTO_LF);\r
+ return;\r
+ }\r
}\r
} else {\r
//\r
return;\r
} else {\r
//\r
- // ASSERT that must have EFI Shell\r
- //\r
- ASSERT(mEfiShellEnvironment2 != NULL);\r
+ // Check for EFI shell\r
//\r
- // Disable with EFI Shell\r
- //\r
- mEfiShellEnvironment2->DisablePageBreak ();\r
- return;\r
+ if (mEfiShellEnvironment2 != NULL) {\r
+ //\r
+ // Disable with EFI Shell\r
+ //\r
+ mEfiShellEnvironment2->DisablePageBreak ();\r
+ return;\r
+ }\r
}\r
}\r
}\r
}\r
\r
//\r
- // ASSERT that we must have EFI shell\r
- //\r
- ASSERT(mEfiShellEnvironment2 != NULL);\r
-\r
- //\r
- // make sure the list head is initialized\r
+ // Check for EFI shell\r
//\r
- InitializeListHead(&mOldStyleFileList);\r
+ if (mEfiShellEnvironment2 != NULL) {\r
+ //\r
+ // make sure the list head is initialized\r
+ //\r
+ InitializeListHead(&mOldStyleFileList);\r
\r
- //\r
- // Get the EFI Shell list of files\r
- //\r
- Status = mEfiShellEnvironment2->FileMetaArg(Arg, &mOldStyleFileList);\r
- if (EFI_ERROR(Status)) {\r
- *ListHead = NULL;\r
- return (Status);\r
- }\r
+ //\r
+ // Get the EFI Shell list of files\r
+ //\r
+ Status = mEfiShellEnvironment2->FileMetaArg(Arg, &mOldStyleFileList);\r
+ if (EFI_ERROR(Status)) {\r
+ *ListHead = NULL;\r
+ return (Status);\r
+ }\r
\r
- if (*ListHead == NULL) {\r
- *ListHead = (EFI_SHELL_FILE_INFO *)AllocateZeroPool(sizeof(EFI_SHELL_FILE_INFO));\r
if (*ListHead == NULL) {\r
- return (EFI_OUT_OF_RESOURCES);\r
+ *ListHead = (EFI_SHELL_FILE_INFO *)AllocateZeroPool(sizeof(EFI_SHELL_FILE_INFO));\r
+ if (*ListHead == NULL) {\r
+ return (EFI_OUT_OF_RESOURCES);\r
+ }\r
+ InitializeListHead(&((*ListHead)->Link));\r
}\r
- InitializeListHead(&((*ListHead)->Link));\r
- }\r
\r
- //\r
- // Convert that to equivalent of UEFI Shell 2.0 structure\r
- //\r
- InternalShellConvertFileListType(&mOldStyleFileList, &(*ListHead)->Link);\r
+ //\r
+ // Convert that to equivalent of UEFI Shell 2.0 structure\r
+ //\r
+ InternalShellConvertFileListType(&mOldStyleFileList, &(*ListHead)->Link);\r
\r
- //\r
- // Free the EFI Shell version that was converted.\r
- //\r
- mEfiShellEnvironment2->FreeFileList(&mOldStyleFileList);\r
+ //\r
+ // Free the EFI Shell version that was converted.\r
+ //\r
+ mEfiShellEnvironment2->FreeFileList(&mOldStyleFileList);\r
\r
- if ((*ListHead)->Link.ForwardLink == (*ListHead)->Link.BackLink && (*ListHead)->Link.BackLink == &((*ListHead)->Link)) {\r
- FreePool(*ListHead);\r
- *ListHead = NULL;\r
- Status = EFI_NOT_FOUND;\r
+ if ((*ListHead)->Link.ForwardLink == (*ListHead)->Link.BackLink && (*ListHead)->Link.BackLink == &((*ListHead)->Link)) {\r
+ FreePool(*ListHead);\r
+ *ListHead = NULL;\r
+ Status = EFI_NOT_FOUND;\r
+ }\r
+ return (Status);\r
}\r
\r
- return (Status);\r
+ return (EFI_UNSUPPORTED);\r
}\r
/**\r
Free the linked list returned from ShellOpenFileMetaArg.\r
//\r
if (mEfiShellProtocol != NULL) {\r
return (mEfiShellProtocol->FreeFileList(ListHead));\r
- } else {\r
+ } else if (mEfiShellEnvironment2 != NULL) {\r
//\r
// Since this is EFI Shell version we need to free our internally made copy\r
// of the list\r
}\r
return EFI_SUCCESS;\r
}\r
+\r
+ return (EFI_UNSUPPORTED);\r
}\r
\r
/**\r
if (TestPath[StrLen(TestPath)-1] != L'\\') {\r
StrCat(TestPath, L"\\");\r
}\r
+ if (FileName[0] == L'\\') {\r
+ FileName++;\r
+ }\r
StrCat(TestPath, FileName);\r
if (StrStr(Walker, L";") != NULL) {\r
Walker = StrStr(Walker, L";") + 1;\r
CHAR16 *ResumeLocation;\r
CHAR16 *FormatWalker;\r
UINTN OriginalAttribute;\r
+ CHAR16 *mPostReplaceFormat;\r
+ CHAR16 *mPostReplaceFormat2;\r
+\r
+ mPostReplaceFormat = AllocateZeroPool (PcdGet16 (PcdShellPrintBufferSize));\r
+ mPostReplaceFormat2 = AllocateZeroPool (PcdGet16 (PcdShellPrintBufferSize));\r
+\r
+ if (mPostReplaceFormat == NULL || mPostReplaceFormat2 == NULL) {\r
+ SHELL_FREE_NON_NULL(mPostReplaceFormat);\r
+ SHELL_FREE_NON_NULL(mPostReplaceFormat2);\r
+ return (EFI_OUT_OF_RESOURCES);\r
+ }\r
\r
Status = EFI_SUCCESS;\r
OriginalAttribute = gST->ConOut->Mode->Attribute;\r
}\r
\r
gST->ConOut->SetAttribute(gST->ConOut, OriginalAttribute);\r
+\r
+ SHELL_FREE_NON_NULL(mPostReplaceFormat);\r
+ SHELL_FREE_NON_NULL(mPostReplaceFormat2);\r
return (Status);\r
}\r
\r