diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/Edit/Edit.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/Edit/Edit.c index bcd3b56704..34e5ddc25c 100644 --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/Edit/Edit.c +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/Edit/Edit.c @@ -58,101 +58,103 @@ ShellCommandRunEdit ( } else { ASSERT (FALSE); } + + return ShellStatus; + } + + if (ShellCommandLineGetCount (Package) > 2) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"edit"); + ShellStatus = SHELL_INVALID_PARAMETER; } else { - if (ShellCommandLineGetCount (Package) > 2) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"edit"); - ShellStatus = SHELL_INVALID_PARAMETER; - } else { - Cwd = gEfiShellProtocol->GetCurDir (NULL); - if (Cwd == NULL) { - Cwd = ShellGetEnvironmentVariable (L"path"); - if (Cwd != NULL) { - Nfs = StrnCatGrow (&Nfs, NULL, Cwd+3, 0); - if (Nfs != NULL) { - Spot = StrStr (Nfs, L";"); - if (Spot != NULL) { - *Spot = CHAR_NULL; - } - - Spot = StrStr (Nfs, L"\\"); - if (Spot != NULL) { - Spot[1] = CHAR_NULL; - } - - gEfiShellProtocol->SetCurDir (NULL, Nfs); - FreePool (Nfs); + Cwd = gEfiShellProtocol->GetCurDir (NULL); + if (Cwd == NULL) { + Cwd = ShellGetEnvironmentVariable (L"path"); + if (Cwd != NULL) { + Nfs = StrnCatGrow (&Nfs, NULL, Cwd+3, 0); + if (Nfs != NULL) { + Spot = StrStr (Nfs, L";"); + if (Spot != NULL) { + *Spot = CHAR_NULL; } - } - } - Status = MainEditorInit (); - - if (EFI_ERROR (Status)) { - gST->ConOut->ClearScreen (gST->ConOut); - gST->ConOut->EnableCursor (gST->ConOut, TRUE); - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_EDIT_MAIN_INIT_FAILED), gShellDebug1HiiHandle); - } else { - MainEditorBackup (); - - // - // if editor launched with file named - // - if (ShellCommandLineGetCount (Package) == 2) { - TempParam = ShellCommandLineGetRawValue (Package, 1); - if (TempParam == NULL) { - ASSERT (TempParam != NULL); - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"edit"); - ShellStatus = SHELL_INVALID_PARAMETER; - } else { - FileBufferSetFileName (TempParam); + Spot = StrStr (Nfs, L"\\"); + if (Spot != NULL) { + Spot[1] = CHAR_NULL; } - } - Status = FileBufferRead (MainEditor.FileBuffer->FileName, FALSE); - if (!EFI_ERROR (Status)) { - MainEditorRefresh (); - - Status = MainEditorKeyInput (); - } - - if (Status != EFI_OUT_OF_RESOURCES) { - // - // back up the status string - // - Buffer = CatSPrint (NULL, L"%s", StatusBarGetString ()); - } - - MainEditorCleanup (); - - // - // print editor exit code on screen - // - if (Status == EFI_SUCCESS) { - } else if (Status == EFI_OUT_OF_RESOURCES) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_OUT_MEM), gShellDebug1HiiHandle, L"edit"); - } else { - if (Buffer != NULL) { - if (StrCmp (Buffer, L"") != 0) { - // - // print out the status string - // - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_EDIT_MAIN_BUFFER), gShellDebug1HiiHandle, Buffer); - } else { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_EDIT_MAIN_UNKNOWN_EDITOR_ERR), gShellDebug1HiiHandle); - } - } else { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_EDIT_MAIN_UNKNOWN_EDITOR_ERR), gShellDebug1HiiHandle); - } - } - - if (Status != EFI_OUT_OF_RESOURCES) { - SHELL_FREE_NON_NULL (Buffer); + gEfiShellProtocol->SetCurDir (NULL, Nfs); + FreePool (Nfs); } } } - ShellCommandLineFreeVarList (Package); + Status = MainEditorInit (); + + if (EFI_ERROR (Status)) { + gST->ConOut->ClearScreen (gST->ConOut); + gST->ConOut->EnableCursor (gST->ConOut, TRUE); + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_EDIT_MAIN_INIT_FAILED), gShellDebug1HiiHandle); + } else { + MainEditorBackup (); + + // + // if editor launched with file named + // + if (ShellCommandLineGetCount (Package) == 2) { + TempParam = ShellCommandLineGetRawValue (Package, 1); + if (TempParam == NULL) { + ASSERT (TempParam != NULL); + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"edit"); + ShellStatus = SHELL_INVALID_PARAMETER; + } else { + FileBufferSetFileName (TempParam); + } + } + + Status = FileBufferRead (MainEditor.FileBuffer->FileName, FALSE); + if (!EFI_ERROR (Status)) { + MainEditorRefresh (); + + Status = MainEditorKeyInput (); + } + + if (Status != EFI_OUT_OF_RESOURCES) { + // + // back up the status string + // + Buffer = CatSPrint (NULL, L"%s", StatusBarGetString ()); + } + + MainEditorCleanup (); + + // + // print editor exit code on screen + // + if (Status == EFI_SUCCESS) { + } else if (Status == EFI_OUT_OF_RESOURCES) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_OUT_MEM), gShellDebug1HiiHandle, L"edit"); + } else { + if (Buffer != NULL) { + if (StrCmp (Buffer, L"") != 0) { + // + // print out the status string + // + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_EDIT_MAIN_BUFFER), gShellDebug1HiiHandle, Buffer); + } else { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_EDIT_MAIN_UNKNOWN_EDITOR_ERR), gShellDebug1HiiHandle); + } + } else { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_EDIT_MAIN_UNKNOWN_EDITOR_ERR), gShellDebug1HiiHandle); + } + } + + if (Status != EFI_OUT_OF_RESOURCES) { + SHELL_FREE_NON_NULL (Buffer); + } + } } + ShellCommandLineFreeVarList (Package); + return ShellStatus; } diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/EfiCompress.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/EfiCompress.c index f31b4ffd27..9ee3ac6952 100644 --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/EfiCompress.c +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/EfiCompress.c @@ -71,92 +71,94 @@ ShellCommandRunEfiCompress ( } else { ASSERT (FALSE); } + + return ShellStatus; + } + + if (ShellCommandLineGetCount (Package) > 3) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"eficompress"); + ShellStatus = SHELL_INVALID_PARAMETER; + } else if (ShellCommandLineGetCount (Package) < 3) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"eficompress"); + ShellStatus = SHELL_INVALID_PARAMETER; } else { - if (ShellCommandLineGetCount (Package) > 3) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"eficompress"); - ShellStatus = SHELL_INVALID_PARAMETER; - } else if (ShellCommandLineGetCount (Package) < 3) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"eficompress"); + TempParam = ShellCommandLineGetRawValue (Package, 1); + if (TempParam == NULL) { + ASSERT (TempParam != NULL); + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"eficompress"); ShellStatus = SHELL_INVALID_PARAMETER; + goto Exit; + } + + InFileName = ShellFindFilePath (TempParam); + OutFileName = ShellCommandLineGetRawValue (Package, 2); + if ((InFileName == NULL) || (OutFileName == NULL)) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, L"eficompress", TempParam); + ShellStatus = SHELL_NOT_FOUND; } else { - TempParam = ShellCommandLineGetRawValue (Package, 1); - if (TempParam == NULL) { - ASSERT (TempParam != NULL); - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"eficompress"); + if (ShellIsDirectory (InFileName) == EFI_SUCCESS) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, L"eficompress", InFileName); ShellStatus = SHELL_INVALID_PARAMETER; - goto Exit; } - InFileName = ShellFindFilePath (TempParam); - OutFileName = ShellCommandLineGetRawValue (Package, 2); - if ((InFileName == NULL) || (OutFileName == NULL)) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, L"eficompress", TempParam); - ShellStatus = SHELL_NOT_FOUND; - } else { - if (ShellIsDirectory (InFileName) == EFI_SUCCESS) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, L"eficompress", InFileName); - ShellStatus = SHELL_INVALID_PARAMETER; + if (ShellIsDirectory (OutFileName) == EFI_SUCCESS) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, L"eficompress", OutFileName); + ShellStatus = SHELL_INVALID_PARAMETER; + } + + if (ShellStatus == SHELL_SUCCESS) { + Status = ShellOpenFileByName (InFileName, &InShellFileHandle, EFI_FILE_MODE_READ, 0); + if (EFI_ERROR (Status)) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"eficompress", ShellCommandLineGetRawValue (Package, 1)); + ShellStatus = SHELL_NOT_FOUND; } - if (ShellIsDirectory (OutFileName) == EFI_SUCCESS) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, L"eficompress", OutFileName); - ShellStatus = SHELL_INVALID_PARAMETER; + Status = ShellOpenFileByName (OutFileName, &OutShellFileHandle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE|EFI_FILE_MODE_CREATE, 0); + if (EFI_ERROR (Status)) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"eficompress", ShellCommandLineGetRawValue (Package, 2)); + ShellStatus = SHELL_NOT_FOUND; } + } - if (ShellStatus == SHELL_SUCCESS) { - Status = ShellOpenFileByName (InFileName, &InShellFileHandle, EFI_FILE_MODE_READ, 0); - if (EFI_ERROR (Status)) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"eficompress", ShellCommandLineGetRawValue (Package, 1)); - ShellStatus = SHELL_NOT_FOUND; - } - - Status = ShellOpenFileByName (OutFileName, &OutShellFileHandle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE|EFI_FILE_MODE_CREATE, 0); - if (EFI_ERROR (Status)) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"eficompress", ShellCommandLineGetRawValue (Package, 2)); - ShellStatus = SHELL_NOT_FOUND; - } - } - - if (ShellStatus == SHELL_SUCCESS) { - Status = gEfiShellProtocol->GetFileSize (InShellFileHandle, &InSize); + if (ShellStatus == SHELL_SUCCESS) { + Status = gEfiShellProtocol->GetFileSize (InShellFileHandle, &InSize); + ASSERT_EFI_ERROR (Status); + InBuffer = AllocateZeroPool ((UINTN)InSize); + if (InBuffer == NULL) { + Status = EFI_OUT_OF_RESOURCES; + } else { + InSize2 = (UINTN)InSize; + Status = gEfiShellProtocol->ReadFile (InShellFileHandle, &InSize2, InBuffer); + InSize = InSize2; ASSERT_EFI_ERROR (Status); - InBuffer = AllocateZeroPool ((UINTN)InSize); - if (InBuffer == NULL) { - Status = EFI_OUT_OF_RESOURCES; - } else { - InSize2 = (UINTN)InSize; - Status = gEfiShellProtocol->ReadFile (InShellFileHandle, &InSize2, InBuffer); - InSize = InSize2; - ASSERT_EFI_ERROR (Status); - Status = Compress (InBuffer, InSize, OutBuffer, &OutSize); - if (Status == EFI_BUFFER_TOO_SMALL) { - OutBuffer = AllocateZeroPool ((UINTN)OutSize); - if (OutBuffer == NULL) { - Status = EFI_OUT_OF_RESOURCES; - } else { - Status = Compress (InBuffer, InSize, OutBuffer, &OutSize); - } + Status = Compress (InBuffer, InSize, OutBuffer, &OutSize); + if (Status == EFI_BUFFER_TOO_SMALL) { + OutBuffer = AllocateZeroPool ((UINTN)OutSize); + if (OutBuffer == NULL) { + Status = EFI_OUT_OF_RESOURCES; + } else { + Status = Compress (InBuffer, InSize, OutBuffer, &OutSize); } } + } + if (EFI_ERROR (Status)) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_EFI_COMPRESS_FAIL), gShellDebug1HiiHandle, Status); + ShellStatus = ((Status == EFI_OUT_OF_RESOURCES) ? SHELL_OUT_OF_RESOURCES : SHELL_DEVICE_ERROR); + } else { + OutSize2 = (UINTN)OutSize; + Status = gEfiShellProtocol->WriteFile (OutShellFileHandle, &OutSize2, OutBuffer); if (EFI_ERROR (Status)) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_EFI_COMPRESS_FAIL), gShellDebug1HiiHandle, Status); - ShellStatus = ((Status == EFI_OUT_OF_RESOURCES) ? SHELL_OUT_OF_RESOURCES : SHELL_DEVICE_ERROR); - } else { - OutSize2 = (UINTN)OutSize; - Status = gEfiShellProtocol->WriteFile (OutShellFileHandle, &OutSize2, OutBuffer); - if (EFI_ERROR (Status)) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_WRITE_FAIL), gShellDebug1HiiHandle, L"eficompress", OutFileName); - ShellStatus = SHELL_DEVICE_ERROR; - } + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_WRITE_FAIL), gShellDebug1HiiHandle, L"eficompress", OutFileName); + ShellStatus = SHELL_DEVICE_ERROR; } } } } - - ShellCommandLineFreeVarList (Package); } + ShellCommandLineFreeVarList (Package); + Exit: if ((ShellStatus != SHELL_SUCCESS) && (Package != NULL)) { ShellCommandLineFreeVarList (Package); diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/EfiDecompress.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/EfiDecompress.c index 041fef71a8..a31183254d 100644 --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/EfiDecompress.c +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/EfiDecompress.c @@ -76,118 +76,119 @@ ShellCommandRunEfiDecompress ( } else { ASSERT (FALSE); } + + return ShellStatus; + } + + if (ShellCommandLineGetCount (Package) > 3) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"efidecompress"); + ShellStatus = SHELL_INVALID_PARAMETER; + } else if (ShellCommandLineGetCount (Package) < 3) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"efidecompress"); + ShellStatus = SHELL_INVALID_PARAMETER; } else { - if (ShellCommandLineGetCount (Package) > 3) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"efidecompress"); - ShellStatus = SHELL_INVALID_PARAMETER; - } else if (ShellCommandLineGetCount (Package) < 3) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"efidecompress"); + TempParam = ShellCommandLineGetRawValue (Package, 1); + if (TempParam == NULL) { + ASSERT (TempParam != NULL); + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"efidecompress"); ShellStatus = SHELL_INVALID_PARAMETER; + goto Done; + } + + InFileName = ShellFindFilePath (TempParam); + OutFileName = ShellCommandLineGetRawValue (Package, 2); + if ((InFileName == NULL) || (OutFileName == NULL)) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, L"efidecompress", TempParam); + ShellStatus = SHELL_NOT_FOUND; } else { - TempParam = ShellCommandLineGetRawValue (Package, 1); - if (TempParam == NULL) { - ASSERT (TempParam != NULL); - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"efidecompress"); + if (ShellIsDirectory (InFileName) == EFI_SUCCESS) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, L"efidecompress", InFileName); ShellStatus = SHELL_INVALID_PARAMETER; - goto Done; } - InFileName = ShellFindFilePath (TempParam); - OutFileName = ShellCommandLineGetRawValue (Package, 2); - if ((InFileName == NULL) || (OutFileName == NULL)) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, L"efidecompress", TempParam); - ShellStatus = SHELL_NOT_FOUND; - } else { - if (ShellIsDirectory (InFileName) == EFI_SUCCESS) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, L"efidecompress", InFileName); - ShellStatus = SHELL_INVALID_PARAMETER; + if (ShellIsDirectory (OutFileName) == EFI_SUCCESS) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, L"efidecompress", OutFileName); + ShellStatus = SHELL_INVALID_PARAMETER; + } + + if (ShellStatus == SHELL_SUCCESS) { + Status = ShellOpenFileByName (InFileName, &InFileHandle, EFI_FILE_MODE_READ, 0); + if (EFI_ERROR (Status)) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"efidecompress", ShellCommandLineGetRawValue (Package, 1)); + ShellStatus = SHELL_NOT_FOUND; + } + } + + if (ShellStatus == SHELL_SUCCESS) { + Status = FileHandleGetSize (InFileHandle, &Temp64Bit); + if (EFI_ERROR (Status)) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"efidecompress", ShellCommandLineGetRawValue (Package, 1)); + ShellStatus = SHELL_NOT_FOUND; + } + } + + if (ShellStatus == SHELL_SUCCESS) { + // + // Limit the File Size to UINT32, even though calls accept UINTN. + // 32 bits = 4gb. + // + Status = SafeUint64ToUint32 (Temp64Bit, (UINT32 *)&InSize); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + ShellStatus = SHELL_BAD_BUFFER_SIZE; + goto Done; } - if (ShellIsDirectory (OutFileName) == EFI_SUCCESS) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, L"efidecompress", OutFileName); - ShellStatus = SHELL_INVALID_PARAMETER; + InBuffer = AllocateZeroPool (InSize); + if (InBuffer == NULL) { + Status = EFI_OUT_OF_RESOURCES; + } else { + Status = gEfiShellProtocol->ReadFile (InFileHandle, &InSize, InBuffer); + ASSERT_EFI_ERROR (Status); + + Status = gBS->LocateProtocol (&gEfiDecompressProtocolGuid, NULL, (VOID **)&Decompress); + ASSERT_EFI_ERROR (Status); + + Status = Decompress->GetInfo (Decompress, InBuffer, (UINT32)InSize, &OutSize, &ScratchSize); } - if (ShellStatus == SHELL_SUCCESS) { - Status = ShellOpenFileByName (InFileName, &InFileHandle, EFI_FILE_MODE_READ, 0); + if (EFI_ERROR (Status) || (OutSize == 0)) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_EFI_DECOMPRESS_NOPE), gShellDebug1HiiHandle, InFileName); + ShellStatus = SHELL_NOT_FOUND; + } else { + Status = ShellOpenFileByName (OutFileName, &OutFileHandle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE|EFI_FILE_MODE_CREATE, 0); if (EFI_ERROR (Status)) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"efidecompress", ShellCommandLineGetRawValue (Package, 1)); - ShellStatus = SHELL_NOT_FOUND; - } - } - - if (ShellStatus == SHELL_SUCCESS) { - Status = FileHandleGetSize (InFileHandle, &Temp64Bit); - if (EFI_ERROR (Status)) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"efidecompress", ShellCommandLineGetRawValue (Package, 1)); - ShellStatus = SHELL_NOT_FOUND; - } - } - - if (ShellStatus == SHELL_SUCCESS) { - // - // Limit the File Size to UINT32, even though calls accept UINTN. - // 32 bits = 4gb. - // - Status = SafeUint64ToUint32 (Temp64Bit, (UINT32 *)&InSize); - if (EFI_ERROR (Status)) { - ASSERT_EFI_ERROR (Status); - ShellStatus = SHELL_BAD_BUFFER_SIZE; - goto Done; - } - - InBuffer = AllocateZeroPool (InSize); - if (InBuffer == NULL) { - Status = EFI_OUT_OF_RESOURCES; - } else { - Status = gEfiShellProtocol->ReadFile (InFileHandle, &InSize, InBuffer); - ASSERT_EFI_ERROR (Status); - - Status = gBS->LocateProtocol (&gEfiDecompressProtocolGuid, NULL, (VOID **)&Decompress); - ASSERT_EFI_ERROR (Status); - - Status = Decompress->GetInfo (Decompress, InBuffer, (UINT32)InSize, &OutSize, &ScratchSize); - } - - if (EFI_ERROR (Status) || (OutSize == 0)) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_EFI_DECOMPRESS_NOPE), gShellDebug1HiiHandle, InFileName); + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue (Package, 2), Status); ShellStatus = SHELL_NOT_FOUND; } else { - Status = ShellOpenFileByName (OutFileName, &OutFileHandle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE|EFI_FILE_MODE_CREATE, 0); - if (EFI_ERROR (Status)) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue (Package, 2), Status); - ShellStatus = SHELL_NOT_FOUND; + OutBuffer = AllocateZeroPool (OutSize); + ScratchBuffer = AllocateZeroPool (ScratchSize); + if ((OutBuffer == NULL) || (ScratchBuffer == NULL)) { + Status = EFI_OUT_OF_RESOURCES; } else { - OutBuffer = AllocateZeroPool (OutSize); - ScratchBuffer = AllocateZeroPool (ScratchSize); - if ((OutBuffer == NULL) || (ScratchBuffer == NULL)) { - Status = EFI_OUT_OF_RESOURCES; - } else { - Status = Decompress->Decompress (Decompress, InBuffer, (UINT32)InSize, OutBuffer, OutSize, ScratchBuffer, ScratchSize); - } + Status = Decompress->Decompress (Decompress, InBuffer, (UINT32)InSize, OutBuffer, OutSize, ScratchBuffer, ScratchSize); } } + } + if (EFI_ERROR (Status)) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_EFI_DECOMPRESS_FAIL), gShellDebug1HiiHandle, Status); + ShellStatus = ((Status == EFI_OUT_OF_RESOURCES) ? SHELL_OUT_OF_RESOURCES : SHELL_DEVICE_ERROR); + } else { + OutSizeTemp = OutSize; + Status = gEfiShellProtocol->WriteFile (OutFileHandle, &OutSizeTemp, OutBuffer); + OutSize = (UINT32)OutSizeTemp; if (EFI_ERROR (Status)) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_EFI_DECOMPRESS_FAIL), gShellDebug1HiiHandle, Status); - ShellStatus = ((Status == EFI_OUT_OF_RESOURCES) ? SHELL_OUT_OF_RESOURCES : SHELL_DEVICE_ERROR); - } else { - OutSizeTemp = OutSize; - Status = gEfiShellProtocol->WriteFile (OutFileHandle, &OutSizeTemp, OutBuffer); - OutSize = (UINT32)OutSizeTemp; - if (EFI_ERROR (Status)) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_WRITE_FAIL), gShellDebug1HiiHandle, L"efidecompress", OutFileName, Status); - ShellStatus = SHELL_DEVICE_ERROR; - } + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_WRITE_FAIL), gShellDebug1HiiHandle, L"efidecompress", OutFileName, Status); + ShellStatus = SHELL_DEVICE_ERROR; } } } } + } Done: - - ShellCommandLineFreeVarList (Package); - } + ShellCommandLineFreeVarList (Package); if (InFileHandle != NULL) { gEfiShellProtocol->CloseFile (InFileHandle); diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/HexEdit.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/HexEdit.c index 7385ccf88e..22a9c74954 100644 --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/HexEdit.c +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/HexEdit.c @@ -74,202 +74,204 @@ ShellCommandRunHexEdit ( } else { ASSERT (FALSE); } - } else { - // - // Check for -d - // - if (ShellCommandLineGetFlag (Package, L"-d")) { - if (ShellCommandLineGetCount (Package) < 4) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"hexedit"); - ShellStatus = SHELL_INVALID_PARAMETER; - } else if (ShellCommandLineGetCount (Package) > 4) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"hexedit"); - ShellStatus = SHELL_INVALID_PARAMETER; - } else { - WhatToDo = FileTypeDiskBuffer; - Name = ShellCommandLineGetRawValue (Package, 1); - Offset = ShellStrToUintn (ShellCommandLineGetRawValue (Package, 2)); - Size = ShellStrToUintn (ShellCommandLineGetRawValue (Package, 3)); - } - if ((Offset == (UINTN)-1) || (Size == (UINTN)-1)) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"hexedit", L"-d"); - ShellStatus = SHELL_INVALID_PARAMETER; - } + return ShellStatus; + } + + // + // Check for -d + // + if (ShellCommandLineGetFlag (Package, L"-d")) { + if (ShellCommandLineGetCount (Package) < 4) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"hexedit"); + ShellStatus = SHELL_INVALID_PARAMETER; + } else if (ShellCommandLineGetCount (Package) > 4) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"hexedit"); + ShellStatus = SHELL_INVALID_PARAMETER; + } else { + WhatToDo = FileTypeDiskBuffer; + Name = ShellCommandLineGetRawValue (Package, 1); + Offset = ShellStrToUintn (ShellCommandLineGetRawValue (Package, 2)); + Size = ShellStrToUintn (ShellCommandLineGetRawValue (Package, 3)); } - // - // check for -f - // - if (ShellCommandLineGetFlag (Package, L"-f") && (WhatToDo == FileTypeNone)) { - if (ShellCommandLineGetCount (Package) < 2) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"hexedit"); - ShellStatus = SHELL_INVALID_PARAMETER; - } else if (ShellCommandLineGetCount (Package) > 2) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"hexedit"); - ShellStatus = SHELL_INVALID_PARAMETER; - } else { - Name = ShellCommandLineGetRawValue (Package, 1); - if ((Name == NULL) || !IsValidFileName (Name)) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"hexedit", Name); - ShellStatus = SHELL_INVALID_PARAMETER; - } else { - WhatToDo = FileTypeFileBuffer; - } - } + if ((Offset == (UINTN)-1) || (Size == (UINTN)-1)) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"hexedit", L"-d"); + ShellStatus = SHELL_INVALID_PARAMETER; } + } - // - // check for -m - // - if (ShellCommandLineGetFlag (Package, L"-m") && (WhatToDo == FileTypeNone)) { - if (ShellCommandLineGetCount (Package) < 3) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"hexedit"); - ShellStatus = SHELL_INVALID_PARAMETER; - } else if (ShellCommandLineGetCount (Package) > 3) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"hexedit"); - ShellStatus = SHELL_INVALID_PARAMETER; - } else { - WhatToDo = FileTypeMemBuffer; - Offset = ShellStrToUintn (ShellCommandLineGetRawValue (Package, 1)); - Size = ShellStrToUintn (ShellCommandLineGetRawValue (Package, 2)); - } - } - - Name = ShellCommandLineGetRawValue (Package, 1); - if ((WhatToDo == FileTypeNone) && (Name != NULL)) { - if (ShellCommandLineGetCount (Package) > 2) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"hexedit"); - ShellStatus = SHELL_INVALID_PARAMETER; - } else if (!IsValidFileName (Name)) { + // + // check for -f + // + if (ShellCommandLineGetFlag (Package, L"-f") && (WhatToDo == FileTypeNone)) { + if (ShellCommandLineGetCount (Package) < 2) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"hexedit"); + ShellStatus = SHELL_INVALID_PARAMETER; + } else if (ShellCommandLineGetCount (Package) > 2) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"hexedit"); + ShellStatus = SHELL_INVALID_PARAMETER; + } else { + Name = ShellCommandLineGetRawValue (Package, 1); + if ((Name == NULL) || !IsValidFileName (Name)) { ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"hexedit", Name); ShellStatus = SHELL_INVALID_PARAMETER; } else { WhatToDo = FileTypeFileBuffer; } - } else if (WhatToDo == FileTypeNone) { - if (gEfiShellProtocol->GetCurDir (NULL) == NULL) { - ShellStatus = SHELL_NOT_FOUND; - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_NO_CWD), gShellDebug1HiiHandle, L"hexedit"); - } else { - NewName = EditGetDefaultFileName (L"bin"); - Name = NewName; - WhatToDo = FileTypeFileBuffer; - } } + } - if ((ShellStatus == SHELL_SUCCESS) && (WhatToDo == FileTypeNone)) { + // + // check for -m + // + if (ShellCommandLineGetFlag (Package, L"-m") && (WhatToDo == FileTypeNone)) { + if (ShellCommandLineGetCount (Package) < 3) { ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"hexedit"); ShellStatus = SHELL_INVALID_PARAMETER; - } else if ((WhatToDo == FileTypeFileBuffer) && (ShellGetCurrentDir (NULL) == NULL)) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_NO_CWD), gShellDebug1HiiHandle, L"hexedit"); + } else if (ShellCommandLineGetCount (Package) > 3) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"hexedit"); ShellStatus = SHELL_INVALID_PARAMETER; + } else { + WhatToDo = FileTypeMemBuffer; + Offset = ShellStrToUintn (ShellCommandLineGetRawValue (Package, 1)); + Size = ShellStrToUintn (ShellCommandLineGetRawValue (Package, 2)); + } + } + + Name = ShellCommandLineGetRawValue (Package, 1); + if ((WhatToDo == FileTypeNone) && (Name != NULL)) { + if (ShellCommandLineGetCount (Package) > 2) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"hexedit"); + ShellStatus = SHELL_INVALID_PARAMETER; + } else if (!IsValidFileName (Name)) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"hexedit", Name); + ShellStatus = SHELL_INVALID_PARAMETER; + } else { + WhatToDo = FileTypeFileBuffer; + } + } else if (WhatToDo == FileTypeNone) { + if (gEfiShellProtocol->GetCurDir (NULL) == NULL) { + ShellStatus = SHELL_NOT_FOUND; + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_NO_CWD), gShellDebug1HiiHandle, L"hexedit"); + } else { + NewName = EditGetDefaultFileName (L"bin"); + Name = NewName; + WhatToDo = FileTypeFileBuffer; + } + } + + if ((ShellStatus == SHELL_SUCCESS) && (WhatToDo == FileTypeNone)) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"hexedit"); + ShellStatus = SHELL_INVALID_PARAMETER; + } else if ((WhatToDo == FileTypeFileBuffer) && (ShellGetCurrentDir (NULL) == NULL)) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_NO_CWD), gShellDebug1HiiHandle, L"hexedit"); + ShellStatus = SHELL_INVALID_PARAMETER; + } + + if (ShellStatus == SHELL_SUCCESS) { + // + // Do the editor + // + Status = HMainEditorInit (); + if (EFI_ERROR (Status)) { + gST->ConOut->ClearScreen (gST->ConOut); + gST->ConOut->EnableCursor (gST->ConOut, TRUE); + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_HEXEDIT_INIT_FAILED), gShellDebug1HiiHandle); + } else { + HMainEditorBackup (); + switch (WhatToDo) { + case FileTypeFileBuffer: + Status = HBufferImageRead ( + Name == NULL ? L"" : Name, + NULL, + 0, + 0, + 0, + 0, + FileTypeFileBuffer, + FALSE + ); + break; + + case FileTypeDiskBuffer: + Status = HBufferImageRead ( + NULL, + Name == NULL ? L"" : Name, + Offset, + Size, + 0, + 0, + FileTypeDiskBuffer, + FALSE + ); + break; + + case FileTypeMemBuffer: + Status = HBufferImageRead ( + NULL, + NULL, + 0, + 0, + (UINT32)Offset, + Size, + FileTypeMemBuffer, + FALSE + ); + break; + + default: + Status = EFI_NOT_FOUND; + break; + } + + if (!EFI_ERROR (Status)) { + HMainEditorRefresh (); + Status = HMainEditorKeyInput (); + } + + if (Status != EFI_OUT_OF_RESOURCES) { + // + // back up the status string + // + Buffer = CatSPrint (NULL, L"%s\r\n", StatusBarGetString ()); + } } - if (ShellStatus == SHELL_SUCCESS) { - // - // Do the editor - // - Status = HMainEditorInit (); - if (EFI_ERROR (Status)) { - gST->ConOut->ClearScreen (gST->ConOut); - gST->ConOut->EnableCursor (gST->ConOut, TRUE); - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_HEXEDIT_INIT_FAILED), gShellDebug1HiiHandle); - } else { - HMainEditorBackup (); - switch (WhatToDo) { - case FileTypeFileBuffer: - Status = HBufferImageRead ( - Name == NULL ? L"" : Name, - NULL, - 0, - 0, - 0, - 0, - FileTypeFileBuffer, - FALSE - ); - break; + // + // cleanup + // + HMainEditorCleanup (); - case FileTypeDiskBuffer: - Status = HBufferImageRead ( - NULL, - Name == NULL ? L"" : Name, - Offset, - Size, - 0, - 0, - FileTypeDiskBuffer, - FALSE - ); - break; - - case FileTypeMemBuffer: - Status = HBufferImageRead ( - NULL, - NULL, - 0, - 0, - (UINT32)Offset, - Size, - FileTypeMemBuffer, - FALSE - ); - break; - - default: - Status = EFI_NOT_FOUND; - break; - } - - if (!EFI_ERROR (Status)) { - HMainEditorRefresh (); - Status = HMainEditorKeyInput (); - } - - if (Status != EFI_OUT_OF_RESOURCES) { - // - // back up the status string - // - Buffer = CatSPrint (NULL, L"%s\r\n", StatusBarGetString ()); - } + if (EFI_ERROR (Status)) { + if (ShellStatus == SHELL_SUCCESS) { + ShellStatus = SHELL_UNSUPPORTED; } + } - // - // cleanup - // - HMainEditorCleanup (); - - if (EFI_ERROR (Status)) { - if (ShellStatus == SHELL_SUCCESS) { - ShellStatus = SHELL_UNSUPPORTED; - } - } - - // - // print editor exit code on screen - // - if (Status == EFI_OUT_OF_RESOURCES) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_OUT_MEM), gShellDebug1HiiHandle, L"hexedit"); - } else if (EFI_ERROR (Status)) { - if (Buffer != NULL) { - if (StrCmp (Buffer, L"") != 0) { - // - // print out the status string - // - ShellPrintDefaultEx (L"%s", Buffer); - } else { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_HEXEDIT_UNKNOWN_EDITOR), gShellDebug1HiiHandle); - } + // + // print editor exit code on screen + // + if (Status == EFI_OUT_OF_RESOURCES) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_OUT_MEM), gShellDebug1HiiHandle, L"hexedit"); + } else if (EFI_ERROR (Status)) { + if (Buffer != NULL) { + if (StrCmp (Buffer, L"") != 0) { + // + // print out the status string + // + ShellPrintDefaultEx (L"%s", Buffer); } else { ShellPrintHiiDefaultEx (STRING_TOKEN (STR_HEXEDIT_UNKNOWN_EDITOR), gShellDebug1HiiHandle); } + } else { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_HEXEDIT_UNKNOWN_EDITOR), gShellDebug1HiiHandle); } } - - ShellCommandLineFreeVarList (Package); } + ShellCommandLineFreeVarList (Package); + SHELL_FREE_NON_NULL (Buffer); SHELL_FREE_NON_NULL (NewName); return ShellStatus; diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/LoadPciRom.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/LoadPciRom.c index 81cf823597..8486303b79 100644 --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/LoadPciRom.c +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/LoadPciRom.c @@ -93,93 +93,95 @@ ShellCommandRunLoadPciRom ( } else { ASSERT (FALSE); } - } else { - if (ShellCommandLineGetCount (Package) < 2) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"loadpcirom"); - ShellStatus = SHELL_INVALID_PARAMETER; - } else { - if (ShellCommandLineGetFlag (Package, L"-nc")) { - Connect = FALSE; - } else { - Connect = TRUE; - } + return ShellStatus; + } + + if (ShellCommandLineGetCount (Package) < 2) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"loadpcirom"); + ShellStatus = SHELL_INVALID_PARAMETER; + } else { + if (ShellCommandLineGetFlag (Package, L"-nc")) { + Connect = FALSE; + } else { + Connect = TRUE; + } + + // + // get a list with each file specified by parameters + // if parameter is a directory then add all the files below it to the list + // + for ( ParamCount = 1, Param = ShellCommandLineGetRawValue (Package, ParamCount) + ; Param != NULL + ; ParamCount++, Param = ShellCommandLineGetRawValue (Package, ParamCount) + ) + { + Status = ShellOpenFileMetaArg ((CHAR16 *)Param, EFI_FILE_MODE_WRITE|EFI_FILE_MODE_READ, &FileList); + if (EFI_ERROR (Status)) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"loadpcirom", Param); + ShellStatus = SHELL_ACCESS_DENIED; + break; + } + } + + if ((ShellStatus == SHELL_SUCCESS) && (FileList != NULL)) { // - // get a list with each file specified by parameters - // if parameter is a directory then add all the files below it to the list + // loop through the list and make sure we are not aborting... // - for ( ParamCount = 1, Param = ShellCommandLineGetRawValue (Package, ParamCount) - ; Param != NULL - ; ParamCount++, Param = ShellCommandLineGetRawValue (Package, ParamCount) + for ( Node = (EFI_SHELL_FILE_INFO *)GetFirstNode (&FileList->Link) + ; !IsNull (&FileList->Link, &Node->Link) && !ShellGetExecutionBreakFlag () + ; Node = (EFI_SHELL_FILE_INFO *)GetNextNode (&FileList->Link, &Node->Link) ) { - Status = ShellOpenFileMetaArg ((CHAR16 *)Param, EFI_FILE_MODE_WRITE|EFI_FILE_MODE_READ, &FileList); + if (EFI_ERROR (Node->Status)) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"loadpcirom", Node->FullName); + ShellStatus = SHELL_INVALID_PARAMETER; + continue; + } + + if (FileHandleIsDirectory (Node->Handle) == EFI_SUCCESS) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, L"loadpcirom", Node->FullName); + ShellStatus = SHELL_INVALID_PARAMETER; + continue; + } + + SourceSize = (UINTN)Node->Info->FileSize; + File1Buffer = AllocateZeroPool (SourceSize); + if (File1Buffer == NULL) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_OUT_MEM), gShellDebug1HiiHandle, L"loadpcirom"); + ShellStatus = SHELL_OUT_OF_RESOURCES; + continue; + } + + Status = gEfiShellProtocol->ReadFile (Node->Handle, &SourceSize, File1Buffer); if (EFI_ERROR (Status)) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"loadpcirom", Param); - ShellStatus = SHELL_ACCESS_DENIED; - break; + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_READ_FAIL), gShellDebug1HiiHandle, L"loadpcirom", Node->FullName); + ShellStatus = SHELL_INVALID_PARAMETER; + } else { + Status = LoadEfiDriversFromRomImage ( + File1Buffer, + SourceSize, + Node->FullName + ); + + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_LOAD_PCI_ROM_RES), gShellDebug1HiiHandle, Node->FullName, Status); } + + FreePool (File1Buffer); } + } else if (ShellStatus == SHELL_SUCCESS) { + ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_NOT_SPEC), gShellDebug1HiiHandle, "loadpcirom"); + ShellStatus = SHELL_NOT_FOUND; + } - if ((ShellStatus == SHELL_SUCCESS) && (FileList != NULL)) { - // - // loop through the list and make sure we are not aborting... - // - for ( Node = (EFI_SHELL_FILE_INFO *)GetFirstNode (&FileList->Link) - ; !IsNull (&FileList->Link, &Node->Link) && !ShellGetExecutionBreakFlag () - ; Node = (EFI_SHELL_FILE_INFO *)GetNextNode (&FileList->Link, &Node->Link) - ) - { - if (EFI_ERROR (Node->Status)) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"loadpcirom", Node->FullName); - ShellStatus = SHELL_INVALID_PARAMETER; - continue; - } + if ((FileList != NULL) && !IsListEmpty (&FileList->Link)) { + Status = ShellCloseFileMetaArg (&FileList); + } - if (FileHandleIsDirectory (Node->Handle) == EFI_SUCCESS) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, L"loadpcirom", Node->FullName); - ShellStatus = SHELL_INVALID_PARAMETER; - continue; - } + FileList = NULL; - SourceSize = (UINTN)Node->Info->FileSize; - File1Buffer = AllocateZeroPool (SourceSize); - if (File1Buffer == NULL) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_GEN_OUT_MEM), gShellDebug1HiiHandle, L"loadpcirom"); - ShellStatus = SHELL_OUT_OF_RESOURCES; - continue; - } - - Status = gEfiShellProtocol->ReadFile (Node->Handle, &SourceSize, File1Buffer); - if (EFI_ERROR (Status)) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_READ_FAIL), gShellDebug1HiiHandle, L"loadpcirom", Node->FullName); - ShellStatus = SHELL_INVALID_PARAMETER; - } else { - Status = LoadEfiDriversFromRomImage ( - File1Buffer, - SourceSize, - Node->FullName - ); - - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_LOAD_PCI_ROM_RES), gShellDebug1HiiHandle, Node->FullName, Status); - } - - FreePool (File1Buffer); - } - } else if (ShellStatus == SHELL_SUCCESS) { - ShellPrintHiiDefaultEx (STRING_TOKEN (STR_FILE_NOT_SPEC), gShellDebug1HiiHandle, "loadpcirom"); - ShellStatus = SHELL_NOT_FOUND; - } - - if ((FileList != NULL) && !IsListEmpty (&FileList->Link)) { - Status = ShellCloseFileMetaArg (&FileList); - } - - FileList = NULL; - - if (Connect) { - Status = LoadPciRomConnectAllDriversToAllControllers (); - } + if (Connect) { + Status = LoadPciRomConnectAllDriversToAllControllers (); } }