ShellPkg/AcpiView: Refactor DumpAcpiTableToFile

Method is refactored into two parts. A new method is
created that dumps arbitrary buffers into a newly created
file. This method is called from core code after the core code
determined the appropriate filename to be used.

This improves the modular design.

Cc: Ray Ni <ray.ni@intel.com>
Cc: Zhichao Gao <zhichao.gao@intel.com>
Reviewed-by: Zhichao Gao <zhichao.gao@intel.com>
Signed-off-by: Tomas Pilar <tomas.pilar@arm.com>
This commit is contained in:
Tomas Pilar
2020-06-19 12:59:54 +01:00
committed by mergify[bot]
parent 422fe85cc3
commit d45cf5ffdf
3 changed files with 76 additions and 38 deletions

View File

@ -27,8 +27,6 @@
#include "Arm/SbbrValidator.h" #include "Arm/SbbrValidator.h"
#endif #endif
EFI_HII_HANDLE gShellAcpiViewHiiHandle = NULL;
STATIC UINT32 mTableCount; STATIC UINT32 mTableCount;
STATIC UINT32 mBinTableCount; STATIC UINT32 mBinTableCount;
@ -48,14 +46,10 @@ DumpAcpiTableToFile (
IN CONST UINTN Length IN CONST UINTN Length
) )
{ {
EFI_STATUS Status;
CHAR16 FileNameBuffer[MAX_FILE_NAME_LEN]; CHAR16 FileNameBuffer[MAX_FILE_NAME_LEN];
SHELL_FILE_HANDLE DumpFileHandle;
UINTN TransferBytes; UINTN TransferBytes;
SELECTED_ACPI_TABLE *SelectedTable; SELECTED_ACPI_TABLE *SelectedTable;
DumpFileHandle = NULL;
TransferBytes = Length;
GetSelectedAcpiTable (&SelectedTable); GetSelectedAcpiTable (&SelectedTable);
UnicodeSPrint ( UnicodeSPrint (
@ -66,39 +60,9 @@ DumpAcpiTableToFile (
mBinTableCount++ mBinTableCount++
); );
Status = ShellOpenFileByName (
FileNameBuffer,
&DumpFileHandle,
EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE,
0
);
if (EFI_ERROR (Status)) {
ShellPrintHiiEx (
-1,
-1,
NULL,
STRING_TOKEN (STR_GEN_READONLY_MEDIA),
gShellAcpiViewHiiHandle,
L"acpiview"
);
return FALSE;
}
Print (L"Dumping ACPI table to : %s ... ", FileNameBuffer); Print (L"Dumping ACPI table to : %s ... ", FileNameBuffer);
Status = ShellWriteFile ( TransferBytes = ShellDumpBufferToFile (FileNameBuffer, Ptr, Length);
DumpFileHandle,
&TransferBytes,
(VOID*)Ptr
);
if (EFI_ERROR (Status)) {
Print (L"ERROR: Failed to dump table to binary file.\n");
TransferBytes = 0;
} else {
Print (L"DONE.\n");
}
ShellCloseFile (&DumpFileHandle);
return (Length == TransferBytes); return (Length == TransferBytes);
} }

View File

@ -25,6 +25,7 @@
#include "UefiShellAcpiViewCommandLib.h" #include "UefiShellAcpiViewCommandLib.h"
CONST CHAR16 gShellAcpiViewFileName[] = L"ShellCommand"; CONST CHAR16 gShellAcpiViewFileName[] = L"ShellCommand";
EFI_HII_HANDLE gShellAcpiViewHiiHandle = NULL;
/** /**
An array of acpiview command line parameters. An array of acpiview command line parameters.
@ -98,6 +99,64 @@ RegisterAllParsers (
return Status; return Status;
} }
/**
Dump a buffer to a file. Print error message if a file cannot be created.
@param[in] FileName The filename that shall be created to contain the buffer.
@param[in] Buffer Pointer to buffer that shall be dumped.
@param[in] BufferSize The size of buffer to be dumped in bytes.
@return The number of bytes that were written
**/
UINTN
EFIAPI
ShellDumpBufferToFile (
IN CONST CHAR16* FileNameBuffer,
IN CONST VOID* Buffer,
IN CONST UINTN BufferSize
)
{
EFI_STATUS Status;
SHELL_FILE_HANDLE DumpFileHandle;
UINTN TransferBytes;
Status = ShellOpenFileByName (
FileNameBuffer,
&DumpFileHandle,
EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | EFI_FILE_MODE_CREATE,
0
);
if (EFI_ERROR (Status)) {
ShellPrintHiiEx (
-1,
-1,
NULL,
STRING_TOKEN (STR_GEN_READONLY_MEDIA),
gShellAcpiViewHiiHandle,
L"acpiview"
);
return 0;
}
TransferBytes = BufferSize;
Status = ShellWriteFile (
DumpFileHandle,
&TransferBytes,
(VOID *) Buffer
);
if (EFI_ERROR (Status)) {
Print (L"ERROR: Failed to write binary file.\n");
TransferBytes = 0;
} else {
Print (L"DONE.\n");
}
ShellCloseFile (&DumpFileHandle);
return TransferBytes;
}
/** /**
Return the file name of the help text file if not using HII. Return the file name of the help text file if not using HII.

View File

@ -8,7 +8,22 @@
#ifndef UEFI_SHELL_ACPIVIEW_COMMAND_LIB_H_ #ifndef UEFI_SHELL_ACPIVIEW_COMMAND_LIB_H_
#define UEFI_SHELL_ACPIVIEW_COMMAND_LIB_H_ #define UEFI_SHELL_ACPIVIEW_COMMAND_LIB_H_
extern EFI_HII_HANDLE gShellAcpiViewHiiHandle; /**
Dump a buffer to a file. Print error message if a file cannot be created.
@param[in] FileName The filename that shall be created to contain the buffer.
@param[in] Buffer Pointer to buffer that shall be dumped.
@param[in] BufferSize The size of buffer to be dumped in bytes.
@return The number of bytes that were written
**/
UINTN
EFIAPI
ShellDumpBufferToFile (
IN CONST CHAR16* FileNameBuffer,
IN CONST VOID* Buffer,
IN CONST UINTN BufferSize
);
/** /**
Function for 'acpiview' command. Function for 'acpiview' command.