}\r
} else {\r
Param1Copy = CatSPrint(NULL, L"%s", Param1, NULL);\r
- Param1Copy = PathCleanUpDirectories(Param1Copy);\r
- if (StrCmp(Param1Copy, L".") == 0) {\r
- //\r
- // nothing to do... change to current directory\r
- //\r
- } else if (StrCmp(Param1Copy, L"..") == 0) {\r
- //\r
- // Change up one directory...\r
- //\r
- Directory = ShellGetCurrentDir(NULL);\r
- if (Directory == NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_CWD), gShellLevel2HiiHandle);\r
- ShellStatus = SHELL_NOT_FOUND;\r
- } else {\r
- Drive = GetFullyQualifiedPath(Directory);\r
- PathRemoveLastItem(Drive);\r
- }\r
- if (ShellStatus == SHELL_SUCCESS && Drive != NULL) {\r
+ if (Param1Copy != NULL) {\r
+ Param1Copy = PathCleanUpDirectories(Param1Copy);\r
+ }\r
+ if (Param1Copy != NULL) {\r
+ if (StrCmp(Param1Copy, L".") == 0) {\r
//\r
- // change directory on current drive letter\r
+ // nothing to do... change to current directory\r
//\r
- Status = gEfiShellProtocol->SetCurDir(NULL, Drive);\r
- if (Status == EFI_NOT_FOUND) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle);\r
- ShellStatus = SHELL_NOT_FOUND;\r
- }\r
- }\r
- } else if (StrCmp(Param1Copy, L"\\") == 0) {\r
- //\r
- // Move to root of current drive\r
- //\r
- Directory = ShellGetCurrentDir(NULL);\r
- if (Directory == NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_CWD), gShellLevel2HiiHandle);\r
- ShellStatus = SHELL_NOT_FOUND;\r
- } else {\r
- Drive = GetFullyQualifiedPath(Directory);\r
- while (PathRemoveLastItem(Drive)) ;\r
- }\r
- if (ShellStatus == SHELL_SUCCESS && Drive != NULL) {\r
+ } else if (StrCmp(Param1Copy, L"..") == 0) {\r
//\r
- // change directory on current drive letter\r
+ // Change up one directory...\r
//\r
- Status = gEfiShellProtocol->SetCurDir(NULL, Drive);\r
- if (Status == EFI_NOT_FOUND) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle);\r
+ Directory = ShellGetCurrentDir(NULL);\r
+ if (Directory == NULL) {\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_CWD), gShellLevel2HiiHandle);\r
ShellStatus = SHELL_NOT_FOUND;\r
- }\r
- }\r
- } else if (StrStr(Param1Copy, L":") == NULL) {\r
- if (ShellGetCurrentDir(NULL) == NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_CWD), gShellLevel2HiiHandle);\r
- ShellStatus = SHELL_NOT_FOUND;\r
- } else {\r
- ASSERT((Drive == NULL && DriveSize == 0) || (Drive != NULL));\r
- Drive = StrnCatGrow(&Drive, &DriveSize, ShellGetCurrentDir(NULL), 0);\r
- if (*Param1Copy == L'\\') {\r
- while (PathRemoveLastItem(Drive)) ;\r
- Drive = StrnCatGrow(&Drive, &DriveSize, Param1Copy+1, 0);\r
} else {\r
- Drive = StrnCatGrow(&Drive, &DriveSize, Param1Copy, 0);\r
+ Drive = GetFullyQualifiedPath(Directory);\r
+ PathRemoveLastItem(Drive);\r
}\r
+ if (ShellStatus == SHELL_SUCCESS && Drive != NULL) {\r
+ //\r
+ // change directory on current drive letter\r
+ //\r
+ Status = gEfiShellProtocol->SetCurDir(NULL, Drive);\r
+ if (Status == EFI_NOT_FOUND) {\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle);\r
+ ShellStatus = SHELL_NOT_FOUND;\r
+ }\r
+ }\r
+ } else if (StrCmp(Param1Copy, L"\\") == 0) {\r
//\r
- // Verify that this is a valid directory\r
+ // Move to root of current drive\r
//\r
- Status = gEfiShellProtocol->OpenFileByName(Drive, &Handle, EFI_FILE_MODE_READ);\r
- if (EFI_ERROR(Status)) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_DIR_NF), gShellLevel2HiiHandle, Drive);\r
- ShellStatus = SHELL_NOT_FOUND;\r
- } else if (EFI_ERROR(FileHandleIsDirectory(Handle))) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NOT_DIR), gShellLevel2HiiHandle, Drive);\r
+ Directory = ShellGetCurrentDir(NULL);\r
+ if (Directory == NULL) {\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_CWD), gShellLevel2HiiHandle);\r
ShellStatus = SHELL_NOT_FOUND;\r
+ } else {\r
+ Drive = GetFullyQualifiedPath(Directory);\r
+ while (PathRemoveLastItem(Drive)) ;\r
}\r
if (ShellStatus == SHELL_SUCCESS && Drive != NULL) {\r
//\r
ShellStatus = SHELL_NOT_FOUND;\r
}\r
}\r
- if (Handle != NULL) {\r
- gEfiShellProtocol->CloseFile(Handle);\r
- DEBUG_CODE(Handle = NULL;);\r
+ } else if (StrStr(Param1Copy, L":") == NULL) {\r
+ if (ShellGetCurrentDir(NULL) == NULL) {\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_CWD), gShellLevel2HiiHandle);\r
+ ShellStatus = SHELL_NOT_FOUND;\r
+ } else {\r
+ ASSERT((Drive == NULL && DriveSize == 0) || (Drive != NULL));\r
+ Drive = StrnCatGrow(&Drive, &DriveSize, ShellGetCurrentDir(NULL), 0);\r
+ if (*Param1Copy == L'\\') {\r
+ while (PathRemoveLastItem(Drive)) ;\r
+ Drive = StrnCatGrow(&Drive, &DriveSize, Param1Copy+1, 0);\r
+ } else {\r
+ Drive = StrnCatGrow(&Drive, &DriveSize, Param1Copy, 0);\r
+ }\r
+ //\r
+ // Verify that this is a valid directory\r
+ //\r
+ Status = gEfiShellProtocol->OpenFileByName(Drive, &Handle, EFI_FILE_MODE_READ);\r
+ if (EFI_ERROR(Status)) {\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_DIR_NF), gShellLevel2HiiHandle, Drive);\r
+ ShellStatus = SHELL_NOT_FOUND;\r
+ } else if (EFI_ERROR(FileHandleIsDirectory(Handle))) {\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NOT_DIR), gShellLevel2HiiHandle, Drive);\r
+ ShellStatus = SHELL_NOT_FOUND;\r
+ }\r
+ if (ShellStatus == SHELL_SUCCESS && Drive != NULL) {\r
+ //\r
+ // change directory on current drive letter\r
+ //\r
+ Status = gEfiShellProtocol->SetCurDir(NULL, Drive);\r
+ if (Status == EFI_NOT_FOUND) {\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle);\r
+ ShellStatus = SHELL_NOT_FOUND;\r
+ }\r
+ }\r
+ if (Handle != NULL) {\r
+ gEfiShellProtocol->CloseFile(Handle);\r
+ DEBUG_CODE(Handle = NULL;);\r
+ }\r
}\r
- }\r
- } else {\r
- //\r
- // change directory on other drive letter\r
- //\r
- Drive = AllocateZeroPool(StrSize(Param1Copy));\r
- if (Drive == NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_MEM), gShellLevel2HiiHandle);\r
- ShellStatus = SHELL_OUT_OF_RESOURCES;\r
} else {\r
- Drive = StrCpy(Drive, Param1Copy);\r
- Path = StrStr(Drive, L":");\r
- ASSERT(Path != NULL);\r
- if (*(Path+1) == CHAR_NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle);\r
- ShellStatus = SHELL_NOT_FOUND;\r
+ //\r
+ // change directory on other drive letter\r
+ //\r
+ Drive = AllocateZeroPool(StrSize(Param1Copy));\r
+ if (Drive == NULL) {\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_MEM), gShellLevel2HiiHandle);\r
+ ShellStatus = SHELL_OUT_OF_RESOURCES;\r
} else {\r
- *(Path+1) = CHAR_NULL;\r
- if (Path == Drive + StrLen(Drive)) {\r
+ Drive = StrCpy(Drive, Param1Copy);\r
+ Path = StrStr(Drive, L":");\r
+ ASSERT(Path != NULL);\r
+ if (*(Path+1) == CHAR_NULL) {\r
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle);\r
ShellStatus = SHELL_NOT_FOUND;\r
} else {\r
- Status = gEfiShellProtocol->SetCurDir(Drive, Path+2);\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_PRINT), gShellLevel2HiiHandle, ShellGetCurrentDir(Drive));\r
+ *(Path+1) = CHAR_NULL;\r
+ if (Path == Drive + StrLen(Drive)) {\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle);\r
+ ShellStatus = SHELL_NOT_FOUND;\r
+ } else {\r
+ Status = gEfiShellProtocol->SetCurDir(Drive, Path+2);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_PRINT), gShellLevel2HiiHandle, ShellGetCurrentDir(Drive));\r
+ }\r
+ }\r
+ if (Status == EFI_NOT_FOUND) {\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle);\r
+ Status = SHELL_NOT_FOUND;\r
+ } else if (EFI_ERROR(Status)) {\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_DIR_NF), gShellLevel2HiiHandle, Param1Copy);\r
+ Status = SHELL_NOT_FOUND;\r
}\r
- }\r
- if (Status == EFI_NOT_FOUND) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_CD_NF), gShellLevel2HiiHandle);\r
- Status = SHELL_NOT_FOUND;\r
- } else if (EFI_ERROR(Status)) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_DIR_NF), gShellLevel2HiiHandle, Param1Copy);\r
- Status = SHELL_NOT_FOUND;\r
}\r
}\r
}\r
Helper function to find ShellEnvironment2 for constructor.\r
\r
@param[in] ImageHandle A copy of the calling image's handle.\r
+\r
+ @retval EFI_OUT_OF_RESOURCES Memory allocation failed.\r
**/\r
EFI_STATUS\r
EFIAPI\r
//\r
if (Status == EFI_BUFFER_TOO_SMALL) {\r
Buffer = (EFI_HANDLE*)AllocateZeroPool(BufferSize);\r
- ASSERT(Buffer != NULL);\r
+ if (Buffer == NULL) {\r
+ return (EFI_OUT_OF_RESOURCES);\r
+ }\r
Status = gBS->LocateHandle (ByProtocol,\r
&gEfiShellEnvironment2Guid,\r
NULL, // ignored for ByProtocol\r
// allocate a new EFI_SHELL_FILE_INFO object\r
//\r
NewInfo = AllocateZeroPool(sizeof(EFI_SHELL_FILE_INFO));\r
- ASSERT(NewInfo != NULL);\r
if (NewInfo == NULL) {\r
+ ShellCloseFileMetaArg(&(EFI_SHELL_FILE_INFO*)ListHead);\r
+ ListHead = NULL;\r
break;\r
}\r
\r
//\r
// make sure all the memory allocations were sucessful\r
//\r
- ASSERT(NewInfo->FullName != NULL);\r
- ASSERT(NewInfo->FileName != NULL);\r
- ASSERT(NewInfo->Info != NULL);\r
+ if (NULL == NewInfo->FullName || NewInfo->FileName == NULL || NewInfo->Info == NULL) {\r
+ ShellCloseFileMetaArg(&(EFI_SHELL_FILE_INFO*)ListHead);\r
+ ListHead = NULL;\r
+ break;\r
+ }\r
\r
//\r
// Copt the strings and structure\r
Size = StrSize(Path);\r
Size += StrSize(FileName);\r
TestPath = AllocateZeroPool(Size);\r
- ASSERT(TestPath != NULL);\r
if (TestPath == NULL) {\r
return (NULL);\r
}\r
Size = StrSize(FileName);\r
Size += StrSize(FileExtension);\r
TestPath = AllocateZeroPool(Size);\r
- ASSERT(TestPath != NULL);\r
if (TestPath == NULL) {\r
return (NULL);\r
}\r
//\r
*CheckPackage = (LIST_ENTRY*)AllocateZeroPool(sizeof(LIST_ENTRY));\r
if (*CheckPackage == NULL) {\r
- return EFI_OUT_OF_RESOURCES;\r
+ return (EFI_OUT_OF_RESOURCES);\r
}\r
+\r
InitializeListHead(*CheckPackage);\r
\r
//\r
// this is a flag\r
//\r
CurrentItemPackage = AllocateZeroPool(sizeof(SHELL_PARAM_PACKAGE));\r
- ASSERT(CurrentItemPackage != NULL);\r
+ if (CurrentItemPackage == NULL) {\r
+ ShellCommandLineFreeVarList(*CheckPackage);\r
+ *CheckPackage = NULL;\r
+ return (EFI_OUT_OF_RESOURCES);\r
+ }\r
CurrentItemPackage->Name = AllocateZeroPool(StrSize(Argv[LoopCounter]));\r
- ASSERT(CurrentItemPackage->Name != NULL);\r
+ if (CurrentItemPackage->Name == NULL) {\r
+ ShellCommandLineFreeVarList(*CheckPackage);\r
+ *CheckPackage = NULL;\r
+ return (EFI_OUT_OF_RESOURCES);\r
+ }\r
StrCpy(CurrentItemPackage->Name, Argv[LoopCounter]);\r
CurrentItemPackage->Type = CurrentItemType;\r
CurrentItemPackage->OriginalPosition = (UINTN)(-1);\r
TempPointer++;\r
}\r
CurrentItemPackage = AllocateZeroPool(sizeof(SHELL_PARAM_PACKAGE));\r
- ASSERT(CurrentItemPackage != NULL);\r
+ if (CurrentItemPackage == NULL) {\r
+ ShellCommandLineFreeVarList(*CheckPackage);\r
+ *CheckPackage = NULL;\r
+ return (EFI_OUT_OF_RESOURCES);\r
+ }\r
CurrentItemPackage->Name = NULL;\r
CurrentItemPackage->Type = TypePosition;\r
CurrentItemPackage->Value = AllocateZeroPool(StrSize(TempPointer));\r
- ASSERT(CurrentItemPackage->Value != NULL);\r
+ if (CurrentItemPackage->Value == NULL) {\r
+ ShellCommandLineFreeVarList(*CheckPackage);\r
+ *CheckPackage = NULL;\r
+ return (EFI_OUT_OF_RESOURCES);\r
+ }\r
StrCpy(CurrentItemPackage->Value, TempPointer);\r
CurrentItemPackage->OriginalPosition = Count++;\r
InsertHeadList(*CheckPackage, &CurrentItemPackage->Link);\r
//\r
if (ProblemParam != NULL) {\r
*ProblemParam = AllocateZeroPool(StrSize(Argv[LoopCounter]));\r
- ASSERT(*ProblemParam != NULL);\r
- StrCpy(*ProblemParam, Argv[LoopCounter]); \r
+ if (*ProblemParam != NULL) {\r
+ StrCpy(*ProblemParam, Argv[LoopCounter]); \r
+ }\r
}\r
ShellCommandLineFreeVarList(*CheckPackage);\r
*CheckPackage = NULL;\r
Replace = StrnCatGrow(&Replace, NULL, ReplaceWith, 0);\r
} else {\r
Replace = AllocateZeroPool(StrSize(ReplaceWith) + 2*sizeof(CHAR16));\r
- UnicodeSPrint(Replace, StrSize(ReplaceWith) + 2*sizeof(CHAR16), L"\"%s\"", ReplaceWith);\r
+ if (Replace != NULL) {\r
+ UnicodeSPrint(Replace, StrSize(ReplaceWith) + 2*sizeof(CHAR16), L"\"%s\"", ReplaceWith);\r
+ }\r
}\r
if (Replace == NULL) {\r
return (EFI_OUT_OF_RESOURCES);\r
NewSize += 2 * Count * sizeof(CHAR16);\r
}\r
*Destination = ReallocatePool(*CurrentSize, NewSize, *Destination);\r
- ASSERT(*Destination != NULL);\r
*CurrentSize = NewSize;\r
} else {\r
*Destination = AllocateZeroPool((Count+1)*sizeof(CHAR16));\r
- ASSERT(*Destination != NULL);\r
}\r
\r
//\r
@param[in, out] Ascii Boolean value for indicating whether the file is\r
Ascii (TRUE) or UCS2 (FALSE).\r
\r
- @return The line of text from the file.\r
+ @return The line of text from the file.\r
+ @retval NULL There was not enough memory available.\r
\r
@sa ShellFileHandleReadLine\r
**/\r
Status = ShellFileHandleReadLine(Handle, RetVal, &Size, FALSE, Ascii);\r
if (Status == EFI_BUFFER_TOO_SMALL) {\r
RetVal = AllocateZeroPool(Size);\r
+ if (RetVal == NULL) {\r
+ return (NULL);\r
+ }\r
Status = ShellFileHandleReadLine(Handle, RetVal, &Size, FALSE, Ascii);\r
+ \r
}\r
- ASSERT_EFI_ERROR(Status);\r
if (EFI_ERROR(Status) && (RetVal != NULL)) {\r
FreePool(RetVal);\r
RetVal = NULL;\r