]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaDecompress.c
Enable SetupBrowser to support multiple form class guid.
[mirror_edk2.git] / IntelFrameworkModulePkg / Library / LzmaCustomDecompressLib / LzmaDecompress.c
index b8523f4b4fe2a227a7cabaafe7df39bc5f98146f..5c89d9870f0a8bd3a429207aa6bab883c20a191a 100644 (file)
 #include "Sdk/C/7zVersion.h"\r
 #include "Sdk/C/LzmaDec.h"\r
 \r
-//\r
-// Global data\r
-//\r
-\r
-CONST VOID  *mSourceLastUsedWithGetInfo;\r
-UINT32      mSizeOfLastSource;\r
-UINT32      mDecompressedSizeForLastSource;\r
-VOID        *mScratchBuffer;\r
-UINTN       mScratchBufferSize;\r
-\r
 #define SCRATCH_BUFFER_REQUEST_SIZE SIZE_64KB\r
 \r
+typedef struct\r
+{\r
+  ISzAlloc Functions;\r
+  VOID     *Buffer;\r
+  UINTN    BufferSize;\r
+} ISzAllocWithData;\r
+\r
 /**\r
   Allocation routine used by LZMA decompression.\r
 \r
@@ -44,11 +41,12 @@ SzAlloc (
   )\r
 {\r
   VOID *Addr;\r
+  ISzAllocWithData *Private = (ISzAllocWithData*) P;\r
 \r
-  if (mScratchBufferSize >= Size) {\r
-    Addr = mScratchBuffer;\r
-    mScratchBuffer = (VOID*) ((UINT8*)Addr + Size);\r
-    mScratchBufferSize -= Size;\r
+  if (Private->BufferSize >= Size) {\r
+    Addr = Private->Buffer;\r
+    Private->Buffer = (VOID*) ((UINT8*)Addr + Size);\r
+    Private->BufferSize -= Size;\r
     return Addr;\r
   } else {\r
     ASSERT (FALSE);\r
@@ -75,8 +73,6 @@ SzFree (
   //\r
 }\r
 \r
-STATIC ISzAlloc g_Alloc = { SzAlloc, SzFree };\r
-\r
 #define LZMA_HEADER_SIZE (LZMA_PROPS_SIZE + 8)\r
 \r
 /**\r
@@ -151,15 +147,11 @@ LzmaUefiDecompressGetInfo (
 \r
   DecodedSize = GetDecodedSizeOfBuf((UINT8*)Source);\r
 \r
-  mSourceLastUsedWithGetInfo = Source;\r
-  mSizeOfLastSource = SourceSize;\r
-  mDecompressedSizeForLastSource = (UInt32)DecodedSize;\r
-  *DestinationSize = mDecompressedSizeForLastSource;\r
+  *DestinationSize = (UINT32)DecodedSize;\r
   *ScratchSize = SCRATCH_BUFFER_REQUEST_SIZE;\r
   return RETURN_SUCCESS;\r
 }\r
 \r
-\r
 /**\r
   Decompresses a Lzma compressed source buffer.\r
 \r
@@ -185,24 +177,24 @@ RETURN_STATUS
 EFIAPI\r
 LzmaUefiDecompress (\r
   IN CONST VOID  *Source,\r
+  IN UINTN       SourceSize,\r
   IN OUT VOID    *Destination,\r
   IN OUT VOID    *Scratch\r
   )\r
 {\r
-  SRes        LzmaResult;\r
-  ELzmaStatus Status;\r
-  SizeT       DecodedBufSize;\r
-  SizeT       EncodedDataSize;\r
-\r
-  if (Source != mSourceLastUsedWithGetInfo) {\r
-    return RETURN_INVALID_PARAMETER;\r
-  }\r
-\r
-  DecodedBufSize = (SizeT)mDecompressedSizeForLastSource;\r
-  EncodedDataSize = (SizeT)(mSizeOfLastSource - LZMA_HEADER_SIZE);\r
-\r
-  mScratchBuffer = Scratch;\r
-  mScratchBufferSize = SCRATCH_BUFFER_REQUEST_SIZE;\r
+  SRes              LzmaResult;\r
+  ELzmaStatus       Status;\r
+  SizeT             DecodedBufSize;\r
+  SizeT             EncodedDataSize;\r
+  ISzAllocWithData  AllocFuncs;\r
+\r
+  AllocFuncs.Functions.Alloc  = SzAlloc;\r
+  AllocFuncs.Functions.Free   = SzFree;\r
+  AllocFuncs.Buffer           = Scratch;\r
+  AllocFuncs.BufferSize       = SCRATCH_BUFFER_REQUEST_SIZE;\r
+  \r
+  DecodedBufSize = (SizeT)GetDecodedSizeOfBuf((UINT8*)Source);\r
+  EncodedDataSize = (SizeT) (SourceSize - LZMA_HEADER_SIZE);\r
 \r
   LzmaResult = LzmaDecode(\r
     Destination,\r
@@ -213,7 +205,7 @@ LzmaUefiDecompress (
     LZMA_PROPS_SIZE,\r
     LZMA_FINISH_END,\r
     &Status,\r
-    &g_Alloc\r
+    &(AllocFuncs.Functions)\r
     );\r
 \r
   if (LzmaResult == SZ_OK) {\r