**/\r
\r
#include "Compress.h"\r
+#include "Decompress.h"\r
#include "TianoCompress.h"\r
#include "EfiUtilityMsgs.h"\r
#include "ParseInf.h"\r
//\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
// 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
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
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
}\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
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
\r
RETURN_STATUS\r
EFIAPI\r
-Decompress (\r
+TDecompress (\r
IN VOID *Source,\r
IN OUT VOID *Destination,\r
IN OUT VOID *Scratch,\r