]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools: Add --uefi option to enable UefiCompress method
authorYunhua Feng <yunhuax.feng@intel.com>
Sun, 30 Sep 2018 03:07:18 +0000 (11:07 +0800)
committerYonghong Zhu <yonghong.zhu@intel.com>
Mon, 15 Oct 2018 07:37:45 +0000 (15:37 +0800)
Add one new option --uefi to enable UefiCompress.
(re-add this patch since it be reverted in Python3 migration patches,
but this patch is not related with Python3)

Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Yunhua Feng <yunhuax.feng@intel.com>
Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com>
BaseTools/Source/C/TianoCompress/TianoCompress.c
BaseTools/Source/C/TianoCompress/TianoCompress.h

index 9a548fae1e13eaacdad99f97c0de43a844976564..b88d7da2ed2f8ec459de82569b46e9ba51a5c078 100644 (file)
@@ -17,6 +17,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 **/\r
 \r
 #include "Compress.h"\r
+#include "Decompress.h"\r
 #include "TianoCompress.h"\r
 #include "EfiUtilityMsgs.h"\r
 #include "ParseInf.h"\r
@@ -65,6 +66,7 @@ static BOOLEAN QuietMode = FALSE;
 //\r
 STATIC BOOLEAN ENCODE = FALSE;\r
 STATIC BOOLEAN DECODE = FALSE;\r
+STATIC BOOLEAN UEFIMODE = FALSE;\r
 STATIC UINT8  *mSrc, *mDst, *mSrcUpperLimit, *mDstUpperLimit;\r
 STATIC UINT8  *mLevel, *mText, *mChildCount, *mBuf, mCLen[NC], mPTLen[NPT], *mLen;\r
 STATIC INT16  mHeap[NC + 1];\r
@@ -1703,6 +1705,8 @@ Returns:
   // Details Option\r
   //\r
   fprintf (stdout, "Options:\n");\r
+  fprintf (stdout, "  --uefi\n\\r
+            Enable UefiCompress, use TianoCompress when without this option\n");\r
   fprintf (stdout, "  -o FileName, --output FileName\n\\r
             File will be created to store the ouput content.\n");\r
   fprintf (stdout, "  -v, --verbose\n\\r
@@ -1822,6 +1826,13 @@ Returns:
       continue;\r
     }\r
 \r
+    if (stricmp(argv[0], "--uefi") == 0) {\r
+      UEFIMODE = TRUE;\r
+      argc--;\r
+      argv++;\r
+      continue;\r
+    }\r
+\r
     if (stricmp (argv[0], "--debug") == 0) {\r
       argc-=2;\r
       argv++;\r
@@ -1939,7 +1950,11 @@ Returns:
   if (DebugMode) {\r
     DebugMsg(UTILITY_NAME, 0, DebugLevel, "Encoding", NULL);\r
   }\r
-  Status = TianoCompress ((UINT8 *)FileBuffer, InputLength, OutBuffer, &DstSize);\r
+  if (UEFIMODE) {\r
+    Status = EfiCompress ((UINT8 *)FileBuffer, InputLength, OutBuffer, &DstSize);\r
+  } else {\r
+    Status = TianoCompress ((UINT8 *)FileBuffer, InputLength, OutBuffer, &DstSize);\r
+  }\r
 \r
   if (Status == EFI_BUFFER_TOO_SMALL) {\r
     OutBuffer = (UINT8 *) malloc (DstSize);\r
@@ -1949,7 +1964,11 @@ Returns:
     }\r
   }\r
 \r
-  Status = TianoCompress ((UINT8 *)FileBuffer, InputLength, OutBuffer, &DstSize);\r
+  if (UEFIMODE) {\r
+    Status = EfiCompress ((UINT8 *)FileBuffer, InputLength, OutBuffer, &DstSize);\r
+  } else {\r
+    Status = TianoCompress ((UINT8 *)FileBuffer, InputLength, OutBuffer, &DstSize);\r
+  }\r
   if (Status != EFI_SUCCESS) {\r
     Error (NULL, 0, 0007, "Error compressing file", NULL);\r
     goto ERROR;\r
@@ -1979,32 +1998,46 @@ Returns:
   if (DebugMode) {\r
     DebugMsg(UTILITY_NAME, 0, DebugLevel, "Decoding\n", NULL);\r
   }\r
-  //\r
-  // Get Compressed file original size\r
-  //\r
-  Src     = (UINT8 *)FileBuffer;\r
-  OrigSize  = Src[4] + (Src[5] << 8) + (Src[6] << 16) + (Src[7] << 24);\r
 \r
-  //\r
-  // Allocate OutputBuffer\r
-  //\r
-  OutBuffer = (UINT8 *)malloc(OrigSize);\r
-  if (OutBuffer == NULL) {\r
-    Error (NULL, 0, 4001, "Resource:", "Memory cannot be allocated!");\r
-    goto ERROR;\r
-   }\r
+  if (UEFIMODE) {\r
+    Status = Extract((VOID *)FileBuffer, InputLength, (VOID *)&OutBuffer, &DstSize, 1);\r
+    if (Status != EFI_SUCCESS) {\r
+      goto ERROR;\r
+    }\r
+    fwrite(OutBuffer, (size_t)(DstSize), 1, OutputFile);\r
+  } else {\r
+    //\r
+    // Get Compressed file original size\r
+    //\r
+    Src     = (UINT8 *)FileBuffer;\r
+    OrigSize  = Src[4] + (Src[5] << 8) + (Src[6] << 16) + (Src[7] << 24);\r
 \r
-  Status = Decompress((VOID *)FileBuffer, (VOID *)OutBuffer, (VOID *)Scratch, 2);\r
-  if (Status != EFI_SUCCESS) {\r
-   goto ERROR;\r
-  }\r
+    //\r
+    // Allocate OutputBuffer\r
+    //\r
+    OutBuffer = (UINT8 *)malloc(OrigSize);\r
+    if (OutBuffer == NULL) {\r
+      Error (NULL, 0, 4001, "Resource:", "Memory cannot be allocated!");\r
+      goto ERROR;\r
+     }\r
 \r
-  fwrite(OutBuffer, (size_t)(Scratch->mOrigSize), 1, OutputFile);\r
+    Status = TDecompress((VOID *)FileBuffer, (VOID *)OutBuffer, (VOID *)Scratch, 2);\r
+    if (Status != EFI_SUCCESS) {\r
+      goto ERROR;\r
+    }\r
+    fwrite(OutBuffer, (size_t)(Scratch->mOrigSize), 1, OutputFile);\r
+  }\r
   fclose(OutputFile);\r
   fclose(InputFile);\r
-  free(Scratch);\r
-  free(FileBuffer);\r
-  free(OutBuffer);\r
+  if (Scratch != NULL) {\r
+    free(Scratch);\r
+  }\r
+  if (FileBuffer != NULL) {\r
+    free(FileBuffer);\r
+  }\r
+  if (OutBuffer != NULL) {\r
+    free(OutBuffer);\r
+  }\r
 \r
   if (DebugMode) {\r
     DebugMsg(UTILITY_NAME, 0, DebugLevel, "Encoding successful!\n", NULL);\r
@@ -2634,7 +2667,7 @@ Done:
 \r
 RETURN_STATUS\r
 EFIAPI\r
-Decompress (\r
+TDecompress (\r
   IN VOID  *Source,\r
   IN OUT VOID    *Destination,\r
   IN OUT VOID    *Scratch,\r
index d75c00d26fd92bd39c2479c2cf460f79974e4dbc..1297982e273628f59892ef30de4783baccaaf2b7 100644 (file)
@@ -427,7 +427,7 @@ Decode (
 \r
 RETURN_STATUS\r
 EFIAPI\r
-Decompress (\r
+TDecompress (\r
   IN VOID  *Source,\r
   IN OUT VOID    *Destination,\r
   IN OUT VOID    *Scratch,\r