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"
#endif
EFI_HII_HANDLE gShellAcpiViewHiiHandle = NULL;
STATIC UINT32 mTableCount;
STATIC UINT32 mBinTableCount;
@ -48,14 +46,10 @@ DumpAcpiTableToFile (
IN CONST UINTN Length
)
{
EFI_STATUS Status;
CHAR16 FileNameBuffer[MAX_FILE_NAME_LEN];
SHELL_FILE_HANDLE DumpFileHandle;
UINTN TransferBytes;
SELECTED_ACPI_TABLE *SelectedTable;
DumpFileHandle = NULL;
TransferBytes = Length;
GetSelectedAcpiTable (&SelectedTable);
UnicodeSPrint (
@ -66,39 +60,9 @@ DumpAcpiTableToFile (
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);
Status = ShellWriteFile (
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);
TransferBytes = ShellDumpBufferToFile (FileNameBuffer, Ptr, Length);
return (Length == TransferBytes);
}

View File

@ -25,6 +25,7 @@
#include "UefiShellAcpiViewCommandLib.h"
CONST CHAR16 gShellAcpiViewFileName[] = L"ShellCommand";
EFI_HII_HANDLE gShellAcpiViewHiiHandle = NULL;
/**
An array of acpiview command line parameters.
@ -98,6 +99,64 @@ RegisterAllParsers (
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.

View File

@ -8,7 +8,22 @@
#ifndef 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.