mirror of
https://github.com/tianocore/edk2
synced 2026-08-27 00:23:19 -04:00
ShellPkg/UefiShellDebug1: Return if ShellCommandLineParse() failed (2/4)
This patch aims to help breaking down the long functions present in the ShellPkg and reduce complexity/nested code and conditions. Return directly if ShellCommandLineParse() returned an error Status. In such case, the "Package" that should be allocated by ShellCommandLineParse() is already freed in: ShellCommandLineParse() \-ShellCommandLineParseEx() \-InternalCommandLineParse() so there is no need to free it with ShellCommandLineFreeVarList(). To avoid having one large commit updating all the UefiShellDebug1 commands, only update these files: - Edit/Edit.c - EfiCompress.c - EfiDecompress.c - HexEdit/HexEdit.c - LoadPciRom.c No functional change should be induced by this patch. Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
This commit is contained in:
parent
7ee84dc437
commit
d23559e847
5 changed files with 492 additions and 483 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue