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:
committed by
mergify[bot]
parent
422fe85cc3
commit
d45cf5ffdf
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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.
|
||||||
|
|
||||||
|
@ -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.
|
||||||
|
Reference in New Issue
Block a user