[edk2-devel] [PATCH] [edk2-staging/FceFmmt]BaseTools: Support no UI section FFS

Feng, YunhuaX posted 1 patch 4 years, 1 month ago
Failed in applying to current master (apply log)
BaseTools/Source/C/FMMT/FirmwareModuleManagement.c | 22 +++++++--
BaseTools/Source/C/FMMT/FmmtLib.c                  | 56 ++++++++++++++++++++++
2 files changed, 73 insertions(+), 5 deletions(-)
[edk2-devel] [PATCH] [edk2-staging/FceFmmt]BaseTools: Support no UI section FFS
Posted by Feng, YunhuaX 4 years, 1 month ago
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2521

1. If FFS file has no UI section, its FILE_GUID will be used as its name.
FMMT tool -d/-a/-r option can be updated to support such FFS file.
2. -v option will print FILE_GUID if no UI section

Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Yunhua Feng<yunhuax.feng@intel.com>
---
 BaseTools/Source/C/FMMT/FirmwareModuleManagement.c | 22 +++++++--
 BaseTools/Source/C/FMMT/FmmtLib.c                  | 56 ++++++++++++++++++++++
 2 files changed, 73 insertions(+), 5 deletions(-)

diff --git a/BaseTools/Source/C/FMMT/FirmwareModuleManagement.c b/BaseTools/Source/C/FMMT/FirmwareModuleManagement.c
index e4fbb5461f..a786113899 100644
--- a/BaseTools/Source/C/FMMT/FirmwareModuleManagement.c
+++ b/BaseTools/Source/C/FMMT/FirmwareModuleManagement.c
@@ -79,11 +79,11 @@ Usage (
             Delete the entire FV in an FD binary\n");
 
   //
   // Command Line for Delete file from FV
   //
-  fprintf (stdout, "  -d <input-binary-file> <FV-id> <File-Name> [<FV-id> <File-Name> ...] <output-binary-file>\n\
+  fprintf (stdout, "  -d <input-binary-file> <FV-id> <File-Name|File-Guid> [<FV-id> <File-Name|File-Guid> ...] <output-binary-file>\n\
             Delete a file (or files) from the firmware volume in an FD binary\n");
 
   //
   // Command Line for Add
   //
@@ -91,11 +91,11 @@ Usage (
             Add a file (or files) to the firmware volume in an FD binary\n");
 
   //
   // Command Line for Replace
   //
-  fprintf (stdout, "  -r <input-binary-file> <FV-id> <File-Name> <NewFilePath> [<FV-id> <File-Name> <NewFilePath> ...] <output-binary-file>\n\
+  fprintf (stdout, "  -r <input-binary-file> <FV-id> <File-Name|File-Guid> <NewFilePath> [<FV-id> <File-Name|File-Guid> <NewFilePath> ...] <output-binary-file>\n\
             The replace command combines the functionality of remove and add into a single operation.\n");
 
   fprintf (stdout, "\nNote:\n");
   fprintf (stdout, "  <FV-id> is the sequence of the firmware volume included in the FD image, it both support the sequentially format like FV0, FV1 and the FV's file guid value format.\n");
   return;
@@ -583,10 +583,11 @@ NeedNewPath(FV_INFORMATION *FvInFd, CHAR8 *FvId, UINT32 FileIndex, BOOLEAN IsAdd
 static UINT32 FindFile(FV_INFORMATION *FvInFd, UINT8 FvLevel, CHAR8 *File, UINT32 *MatchIndex) {
   UINT32 Index = 0;
   CHAR16 *UIName;
   CHAR16 *FfsUIName;
   UINT32 FileNumber = 0;
+  EFI_GUID Guid;
 
   UIName = (CHAR16 *)malloc(_MAX_PATH);
   if (NULL == UIName) {
     return 0;
   }
@@ -612,11 +613,22 @@ static UINT32 FindFile(FV_INFORMATION *FvInFd, UINT8 FvLevel, CHAR8 *File, UINT3
     }
 
   }
   free(UIName);
   free(FfsUIName);
-
+  if (FileNumber == 0) {
+    StringToGuid(File, &Guid);
+    for (Index = 0; Index <= FvInFd->FfsNumbers; Index++) {
+      if (CompareGuid (&Guid, &FvInFd->FfsAttuibutes[Index].GuidName) == 0) {
+        FileNumber += 1;
+        *MatchIndex = Index;
+        if (FileNumber > 1) {
+          break;
+        }
+      }
+    }
+  }
   return FileNumber;
 }
 
 /**
   Search the config file from the path list.
@@ -1089,11 +1101,11 @@ FmmtImageAdd(
             goto FAILED;
         }
         HasUISection = FALSE;
         HasUISection = ParseSection(InputFfs);
         if (!HasUISection) {
-            printf ("WARNING: The newly add file must have a user interface (UI) section, otherwise it cannot be deleted or replaced. \n");
+            printf ("WARNING: The newly add file not have a user interface (UI) section. \n");
         }
         if (NeedNewPath(FvInFd, FvId, 0, TRUE)) {
             do {
                 NewFile = NewFileNode->FileName;
                 //
@@ -1845,11 +1857,11 @@ FmmtImageReplace (
             return EFI_ABORTED;
         }
         HasUISection = FALSE;
         HasUISection = ParseSection(InputFfs);
         if (!HasUISection) {
-            printf ("WARNING: The newly replace file must have a user interface (UI) section, otherwise it cannot be deleted or replaced. \n");
+            printf ("WARNING: The newly replace file not have a user interface (UI) section. \n");
         }
         if (FfsFoundFlag && NeedNewPath(FvInFd, FvId, Index, FALSE)) {
             do {
                 OldFile = OldFileNode -> FileName;
                 NewFile = NewFileNode -> FileName;
diff --git a/BaseTools/Source/C/FMMT/FmmtLib.c b/BaseTools/Source/C/FMMT/FmmtLib.c
index 78b6f3a21d..685ef634f2 100644
--- a/BaseTools/Source/C/FMMT/FmmtLib.c
+++ b/BaseTools/Source/C/FMMT/FmmtLib.c
@@ -824,10 +824,11 @@ LibParseSection (
   UINT16              GuidAttr;
   UINT16              DataOffset;
   CHAR8               *UIFileName;
   CHAR8               *ToolInputFileName;
   CHAR8               *ToolOutputFileName;
+  BOOLEAN              HasUiSection;
 
   DataOffset                 = 0;
   GuidAttr                   = 0;
   ParsedLength               = 0;
   ToolOutputLength           = 0;
@@ -858,10 +859,11 @@ LibParseSection (
   ToolInputFileName          = NULL;
   ToolOutputFileFullName     = NULL;
   HasDepexSection            = FALSE;
   EncapDataNeedUpdata        = TRUE;
   LargeHeaderOffset          = 0;
+  HasUiSection               = FALSE;
 
 
   while (ParsedLength < BufferLength) {
     Ptr           = SectionBuffer + ParsedLength;
 
@@ -888,10 +890,11 @@ LibParseSection (
     switch (Type) {
 
     case EFI_SECTION_FIRMWARE_VOLUME_IMAGE:
 
       EncapDataNeedUpdata = TRUE;
+      HasUiSection = TRUE;
 
       Level ++;
       NumberOfSections ++;
 
       CurrentFv->FfsAttuibutes[*FfsCount].IsLeaf = FALSE;
@@ -988,10 +991,11 @@ LibParseSection (
     case EFI_SECTION_COMPRESSION:
       Level ++;
       NumberOfSections ++;
 
       EncapDataNeedUpdata = TRUE;
+      HasUiSection = TRUE;
       //
       // Put in encapsulate data information.
       //
       LocalEncapData = *CurrentFvEncapData;
       if (LocalEncapData->NextNode != NULL) {
@@ -1166,10 +1170,11 @@ LibParseSection (
       // a GUID defined FV section.
       //
       Level ++;
       NumberOfSections++;
       EncapDataNeedUpdata = TRUE;
+      HasUiSection = TRUE;
       //
       // Put in encapsulate data information.
       //
       LocalEncapData = *CurrentFvEncapData;
       if (LocalEncapData->NextNode != NULL) {
@@ -1593,10 +1598,11 @@ LibParseSection (
       memcpy(CurrentFv->FfsAttuibutes[*FfsCount].Depex, Ptr, SectionLength);
       CurrentFv->FfsAttuibutes[*FfsCount].DepexLen = SectionLength;
       break;
 
     case EFI_SECTION_USER_INTERFACE:
+      HasUiSection = TRUE;
       NumberOfSections ++;
       CurrentFv->FfsAttuibutes[*FfsCount].Level = Level;
 
       UiSectionLength = GetLength (((EFI_USER_INTERFACE_SECTION *) Ptr)->CommonHeader.Size);
     if (UiSectionLength == 0xffffff) {
@@ -1669,10 +1675,34 @@ LibParseSection (
   if (ParsedLength < BufferLength) {
     Error ("FMMT", 0, 0003, "sections do not completely fill the sectioned buffer being parsed", NULL);
     return EFI_SECTION_ERROR;
   }
 
+  if (ViewFlag && !HasUiSection) {
+    //  
+    //print FILE FFS GUID name
+    //
+    BlankChar = LibConstructBlankChar( CurrentFv->FvLevel * 2);
+    if (BlankChar == NULL) {
+      return EFI_OUT_OF_RESOURCES;
+    }
+    
+    fprintf(stdout, "%sFile \"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\"\n", BlankChar, 
+                        CurrentFile->Name.Data1,
+                        CurrentFile->Name.Data2,
+                        CurrentFile->Name.Data3,
+                        CurrentFile->Name.Data4[0],
+                        CurrentFile->Name.Data4[1],
+                        CurrentFile->Name.Data4[2],
+                        CurrentFile->Name.Data4[3],
+                        CurrentFile->Name.Data4[4],
+                        CurrentFile->Name.Data4[5],
+                        CurrentFile->Name.Data4[6],
+                        CurrentFile->Name.Data4[7]
+                        );
+    free(BlankChar);
+  }
 
   return EFI_SUCCESS;
 }
 
 /**
@@ -1819,16 +1849,18 @@ LibGetFileInfo (
   UINT8               GuidBuffer[PRINTED_GUID_BUFFER_SIZE];
   ENCAP_INFO_DATA     *LocalEncapData;
   BOOLEAN             EncapDataNeedUpdateFlag;
   BOOLEAN             IsGeneratedFfs;
   UINT32              FfsFileHeaderSize;
+  CHAR8               *BlankChar;
 
   Status = EFI_SUCCESS;
 
   LocalEncapData  = NULL;
   EncapDataNeedUpdateFlag = TRUE;
   IsGeneratedFfs   = FALSE;
+  BlankChar        = NULL;
 
   FfsFileHeaderSize = GetFfsHeaderLength  ((EFI_FFS_FILE_HEADER *) CurrentFile);
   FileLength        = GetFfsFileLength ((EFI_FFS_FILE_HEADER *) CurrentFile);
 
   //
@@ -1999,10 +2031,34 @@ LibGetFileInfo (
 
    if ( CurrentFile->Type == EFI_FV_FILETYPE_RAW){
       CurrentFv->FfsAttuibutes[*FfsCount].Level = Level;
       if (!ViewFlag){
         LibGenFfsFile(CurrentFile, CurrentFv, FvName, Level, FfsCount, ErasePolarity);
+      } else {
+        //
+        // print EFI_FV_FILETYPE_RAW GUID 
+        //
+        BlankChar = LibConstructBlankChar( CurrentFv->FvLevel * 2);
+        if (BlankChar == NULL) {
+          return EFI_OUT_OF_RESOURCES;
+        }
+    
+        fprintf(stdout, "%sFile \"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\"\n", BlankChar, 
+                        CurrentFile->Name.Data1,
+                        CurrentFile->Name.Data2,
+                        CurrentFile->Name.Data3,
+                        CurrentFile->Name.Data4[0],
+                        CurrentFile->Name.Data4[1],
+                        CurrentFile->Name.Data4[2],
+                        CurrentFile->Name.Data4[3],
+                        CurrentFile->Name.Data4[4],
+                        CurrentFile->Name.Data4[5],
+                        CurrentFile->Name.Data4[6],
+                        CurrentFile->Name.Data4[7]
+                        );
+        free(BlankChar);
+
       }
     } else if( CurrentFile->Type == EFI_FV_FILETYPE_FFS_PAD){
       //EFI_FV_FILETYPE_FFS_PAD
     } else {
     //
-- 
2.12.2.windows.2


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#54288): https://edk2.groups.io/g/devel/message/54288
Mute This Topic: https://groups.io/mt/71210722/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [PATCH] [edk2-staging/FceFmmt]BaseTools: Support no UI section FFS
Posted by Liming Gao 4 years, 1 month ago
Reviewed-by: Liming Gao <liming.gao@intel.com>

> -----Original Message-----
> From: Feng, YunhuaX <yunhuax.feng@intel.com>
> Sent: Wednesday, February 12, 2020 2:24 PM
> To: devel@edk2.groups.io
> Cc: Gao, Liming <liming.gao@intel.com>; Feng, Bob C <bob.c.feng@intel.com>
> Subject: [PATCH] [edk2-staging/FceFmmt]BaseTools: Support no UI section FFS
> 
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2521
> 
> 1. If FFS file has no UI section, its FILE_GUID will be used as its name.
> FMMT tool -d/-a/-r option can be updated to support such FFS file.
> 2. -v option will print FILE_GUID if no UI section
> 
> Cc: Bob Feng <bob.c.feng@intel.com>
> Cc: Liming Gao <liming.gao@intel.com>
> Signed-off-by: Yunhua Feng<yunhuax.feng@intel.com>
> ---
>  BaseTools/Source/C/FMMT/FirmwareModuleManagement.c | 22 +++++++--
>  BaseTools/Source/C/FMMT/FmmtLib.c                  | 56 ++++++++++++++++++++++
>  2 files changed, 73 insertions(+), 5 deletions(-)
> 
> diff --git a/BaseTools/Source/C/FMMT/FirmwareModuleManagement.c b/BaseTools/Source/C/FMMT/FirmwareModuleManagement.c
> index e4fbb5461f..a786113899 100644
> --- a/BaseTools/Source/C/FMMT/FirmwareModuleManagement.c
> +++ b/BaseTools/Source/C/FMMT/FirmwareModuleManagement.c
> @@ -79,11 +79,11 @@ Usage (
>              Delete the entire FV in an FD binary\n");
> 
>    //
>    // Command Line for Delete file from FV
>    //
> -  fprintf (stdout, "  -d <input-binary-file> <FV-id> <File-Name> [<FV-id> <File-Name> ...] <output-binary-file>\n\
> +  fprintf (stdout, "  -d <input-binary-file> <FV-id> <File-Name|File-Guid> [<FV-id> <File-Name|File-Guid> ...] <output-binary-file>\n\
>              Delete a file (or files) from the firmware volume in an FD binary\n");
> 
>    //
>    // Command Line for Add
>    //
> @@ -91,11 +91,11 @@ Usage (
>              Add a file (or files) to the firmware volume in an FD binary\n");
> 
>    //
>    // Command Line for Replace
>    //
> -  fprintf (stdout, "  -r <input-binary-file> <FV-id> <File-Name> <NewFilePath> [<FV-id> <File-Name> <NewFilePath> ...] <output-binary-
> file>\n\
> +  fprintf (stdout, "  -r <input-binary-file> <FV-id> <File-Name|File-Guid> <NewFilePath> [<FV-id> <File-Name|File-Guid>
> <NewFilePath> ...] <output-binary-file>\n\
>              The replace command combines the functionality of remove and add into a single operation.\n");
> 
>    fprintf (stdout, "\nNote:\n");
>    fprintf (stdout, "  <FV-id> is the sequence of the firmware volume included in the FD image, it both support the sequentially format like
> FV0, FV1 and the FV's file guid value format.\n");
>    return;
> @@ -583,10 +583,11 @@ NeedNewPath(FV_INFORMATION *FvInFd, CHAR8 *FvId, UINT32 FileIndex, BOOLEAN IsAdd
>  static UINT32 FindFile(FV_INFORMATION *FvInFd, UINT8 FvLevel, CHAR8 *File, UINT32 *MatchIndex) {
>    UINT32 Index = 0;
>    CHAR16 *UIName;
>    CHAR16 *FfsUIName;
>    UINT32 FileNumber = 0;
> +  EFI_GUID Guid;
> 
>    UIName = (CHAR16 *)malloc(_MAX_PATH);
>    if (NULL == UIName) {
>      return 0;
>    }
> @@ -612,11 +613,22 @@ static UINT32 FindFile(FV_INFORMATION *FvInFd, UINT8 FvLevel, CHAR8 *File, UINT3
>      }
> 
>    }
>    free(UIName);
>    free(FfsUIName);
> -
> +  if (FileNumber == 0) {
> +    StringToGuid(File, &Guid);
> +    for (Index = 0; Index <= FvInFd->FfsNumbers; Index++) {
> +      if (CompareGuid (&Guid, &FvInFd->FfsAttuibutes[Index].GuidName) == 0) {
> +        FileNumber += 1;
> +        *MatchIndex = Index;
> +        if (FileNumber > 1) {
> +          break;
> +        }
> +      }
> +    }
> +  }
>    return FileNumber;
>  }
> 
>  /**
>    Search the config file from the path list.
> @@ -1089,11 +1101,11 @@ FmmtImageAdd(
>              goto FAILED;
>          }
>          HasUISection = FALSE;
>          HasUISection = ParseSection(InputFfs);
>          if (!HasUISection) {
> -            printf ("WARNING: The newly add file must have a user interface (UI) section, otherwise it cannot be deleted or replaced. \n");
> +            printf ("WARNING: The newly add file not have a user interface (UI) section. \n");
>          }
>          if (NeedNewPath(FvInFd, FvId, 0, TRUE)) {
>              do {
>                  NewFile = NewFileNode->FileName;
>                  //
> @@ -1845,11 +1857,11 @@ FmmtImageReplace (
>              return EFI_ABORTED;
>          }
>          HasUISection = FALSE;
>          HasUISection = ParseSection(InputFfs);
>          if (!HasUISection) {
> -            printf ("WARNING: The newly replace file must have a user interface (UI) section, otherwise it cannot be deleted or replaced. \n");
> +            printf ("WARNING: The newly replace file not have a user interface (UI) section. \n");
>          }
>          if (FfsFoundFlag && NeedNewPath(FvInFd, FvId, Index, FALSE)) {
>              do {
>                  OldFile = OldFileNode -> FileName;
>                  NewFile = NewFileNode -> FileName;
> diff --git a/BaseTools/Source/C/FMMT/FmmtLib.c b/BaseTools/Source/C/FMMT/FmmtLib.c
> index 78b6f3a21d..685ef634f2 100644
> --- a/BaseTools/Source/C/FMMT/FmmtLib.c
> +++ b/BaseTools/Source/C/FMMT/FmmtLib.c
> @@ -824,10 +824,11 @@ LibParseSection (
>    UINT16              GuidAttr;
>    UINT16              DataOffset;
>    CHAR8               *UIFileName;
>    CHAR8               *ToolInputFileName;
>    CHAR8               *ToolOutputFileName;
> +  BOOLEAN              HasUiSection;
> 
>    DataOffset                 = 0;
>    GuidAttr                   = 0;
>    ParsedLength               = 0;
>    ToolOutputLength           = 0;
> @@ -858,10 +859,11 @@ LibParseSection (
>    ToolInputFileName          = NULL;
>    ToolOutputFileFullName     = NULL;
>    HasDepexSection            = FALSE;
>    EncapDataNeedUpdata        = TRUE;
>    LargeHeaderOffset          = 0;
> +  HasUiSection               = FALSE;
> 
> 
>    while (ParsedLength < BufferLength) {
>      Ptr           = SectionBuffer + ParsedLength;
> 
> @@ -888,10 +890,11 @@ LibParseSection (
>      switch (Type) {
> 
>      case EFI_SECTION_FIRMWARE_VOLUME_IMAGE:
> 
>        EncapDataNeedUpdata = TRUE;
> +      HasUiSection = TRUE;
> 
>        Level ++;
>        NumberOfSections ++;
> 
>        CurrentFv->FfsAttuibutes[*FfsCount].IsLeaf = FALSE;
> @@ -988,10 +991,11 @@ LibParseSection (
>      case EFI_SECTION_COMPRESSION:
>        Level ++;
>        NumberOfSections ++;
> 
>        EncapDataNeedUpdata = TRUE;
> +      HasUiSection = TRUE;
>        //
>        // Put in encapsulate data information.
>        //
>        LocalEncapData = *CurrentFvEncapData;
>        if (LocalEncapData->NextNode != NULL) {
> @@ -1166,10 +1170,11 @@ LibParseSection (
>        // a GUID defined FV section.
>        //
>        Level ++;
>        NumberOfSections++;
>        EncapDataNeedUpdata = TRUE;
> +      HasUiSection = TRUE;
>        //
>        // Put in encapsulate data information.
>        //
>        LocalEncapData = *CurrentFvEncapData;
>        if (LocalEncapData->NextNode != NULL) {
> @@ -1593,10 +1598,11 @@ LibParseSection (
>        memcpy(CurrentFv->FfsAttuibutes[*FfsCount].Depex, Ptr, SectionLength);
>        CurrentFv->FfsAttuibutes[*FfsCount].DepexLen = SectionLength;
>        break;
> 
>      case EFI_SECTION_USER_INTERFACE:
> +      HasUiSection = TRUE;
>        NumberOfSections ++;
>        CurrentFv->FfsAttuibutes[*FfsCount].Level = Level;
> 
>        UiSectionLength = GetLength (((EFI_USER_INTERFACE_SECTION *) Ptr)->CommonHeader.Size);
>      if (UiSectionLength == 0xffffff) {
> @@ -1669,10 +1675,34 @@ LibParseSection (
>    if (ParsedLength < BufferLength) {
>      Error ("FMMT", 0, 0003, "sections do not completely fill the sectioned buffer being parsed", NULL);
>      return EFI_SECTION_ERROR;
>    }
> 
> +  if (ViewFlag && !HasUiSection) {
> +    //
> +    //print FILE FFS GUID name
> +    //
> +    BlankChar = LibConstructBlankChar( CurrentFv->FvLevel * 2);
> +    if (BlankChar == NULL) {
> +      return EFI_OUT_OF_RESOURCES;
> +    }
> +
> +    fprintf(stdout, "%sFile \"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\"\n", BlankChar,
> +                        CurrentFile->Name.Data1,
> +                        CurrentFile->Name.Data2,
> +                        CurrentFile->Name.Data3,
> +                        CurrentFile->Name.Data4[0],
> +                        CurrentFile->Name.Data4[1],
> +                        CurrentFile->Name.Data4[2],
> +                        CurrentFile->Name.Data4[3],
> +                        CurrentFile->Name.Data4[4],
> +                        CurrentFile->Name.Data4[5],
> +                        CurrentFile->Name.Data4[6],
> +                        CurrentFile->Name.Data4[7]
> +                        );
> +    free(BlankChar);
> +  }
> 
>    return EFI_SUCCESS;
>  }
> 
>  /**
> @@ -1819,16 +1849,18 @@ LibGetFileInfo (
>    UINT8               GuidBuffer[PRINTED_GUID_BUFFER_SIZE];
>    ENCAP_INFO_DATA     *LocalEncapData;
>    BOOLEAN             EncapDataNeedUpdateFlag;
>    BOOLEAN             IsGeneratedFfs;
>    UINT32              FfsFileHeaderSize;
> +  CHAR8               *BlankChar;
> 
>    Status = EFI_SUCCESS;
> 
>    LocalEncapData  = NULL;
>    EncapDataNeedUpdateFlag = TRUE;
>    IsGeneratedFfs   = FALSE;
> +  BlankChar        = NULL;
> 
>    FfsFileHeaderSize = GetFfsHeaderLength  ((EFI_FFS_FILE_HEADER *) CurrentFile);
>    FileLength        = GetFfsFileLength ((EFI_FFS_FILE_HEADER *) CurrentFile);
> 
>    //
> @@ -1999,10 +2031,34 @@ LibGetFileInfo (
> 
>     if ( CurrentFile->Type == EFI_FV_FILETYPE_RAW){
>        CurrentFv->FfsAttuibutes[*FfsCount].Level = Level;
>        if (!ViewFlag){
>          LibGenFfsFile(CurrentFile, CurrentFv, FvName, Level, FfsCount, ErasePolarity);
> +      } else {
> +        //
> +        // print EFI_FV_FILETYPE_RAW GUID
> +        //
> +        BlankChar = LibConstructBlankChar( CurrentFv->FvLevel * 2);
> +        if (BlankChar == NULL) {
> +          return EFI_OUT_OF_RESOURCES;
> +        }
> +
> +        fprintf(stdout, "%sFile \"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\"\n", BlankChar,
> +                        CurrentFile->Name.Data1,
> +                        CurrentFile->Name.Data2,
> +                        CurrentFile->Name.Data3,
> +                        CurrentFile->Name.Data4[0],
> +                        CurrentFile->Name.Data4[1],
> +                        CurrentFile->Name.Data4[2],
> +                        CurrentFile->Name.Data4[3],
> +                        CurrentFile->Name.Data4[4],
> +                        CurrentFile->Name.Data4[5],
> +                        CurrentFile->Name.Data4[6],
> +                        CurrentFile->Name.Data4[7]
> +                        );
> +        free(BlankChar);
> +
>        }
>      } else if( CurrentFile->Type == EFI_FV_FILETYPE_FFS_PAD){
>        //EFI_FV_FILETYPE_FFS_PAD
>      } else {
>      //
> --
> 2.12.2.windows.2


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#54639): https://edk2.groups.io/g/devel/message/54639
Mute This Topic: https://groups.io/mt/71210722/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-