mirror of https://github.com/acidanthera/audk.git
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:
parent
422fe85cc3
commit
d45cf5ffdf
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue