Reviewed-by: Zhichao Gao <zhichao....@intel.com> Thanks, Zhichao
> -----Original Message----- > From: Tomas Pilar <tomas.pi...@arm.com> > Sent: Monday, June 15, 2020 10:04 PM > To: devel@edk2.groups.io > Cc: n...@arm.com; Ni, Ray <ray...@intel.com>; Gao, Zhichao > <zhichao....@intel.com> > Subject: [PATCH v3 5/7] 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...@intel.com> > Cc: Zhichao Gao <zhichao....@intel.com> > Signed-off-by: Tomas Pilar <tomas.pi...@arm.com> > --- > .../UefiShellAcpiViewCommandLib/AcpiView.c | 38 +----------- > .../UefiShellAcpiViewCommandLib.c | 59 +++++++++++++++++++ > .../UefiShellAcpiViewCommandLib.h | 17 +++++- > 3 files changed, 76 insertions(+), 38 deletions(-) > > diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.c > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.c > index 2507ec78204b..1b6721e6734f 100644 > --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.c > +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.c > @@ -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); > } > > diff --git > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLi > b.c > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLi > b.c > index c3942ad24e5b..e6a65d5bc5f7 100644 > --- > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLi > b.c > +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComm > +++ andLib.c > @@ -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. > > diff --git > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLi > b.h > b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLi > b.h > index a3a29164004d..b1b1ffe63e28 100644 > --- > a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLi > b.h > +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewComm > +++ andLib.h > @@ -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. > -- > 2.24.1.windows.2 > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#61574): https://edk2.groups.io/g/devel/message/61574 Mute This Topic: https://groups.io/mt/74894930/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-