]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaDecompress.c
Minor code enhancement.
[mirror_edk2.git] / IntelFrameworkModulePkg / Library / LzmaCustomDecompressLib / LzmaDecompress.c
index b8523f4b4fe2a227a7cabaafe7df39bc5f98146f..97ca8e68f7d3ac508859171fb67da53a44e7d9e6 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   LZMA Decompress interfaces\r
 \r
-  Copyright (c) 2009, Intel Corporation<BR>\r
+  Copyright (c) 2009 - 2010, Intel Corporation<BR>\r
   All rights reserved. This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
   which accompanies this distribution.  The full text of the license may be found at\r
 #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,14 @@ SzAlloc (
   )\r
 {\r
   VOID *Addr;\r
+  ISzAllocWithData *Private;\r
+\r
+  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 +75,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 +149,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
@@ -170,6 +164,7 @@ LzmaUefiDecompressGetInfo (
   then RETURN_INVALID_PARAMETER is returned.\r
 \r
   @param  Source      The source buffer containing the compressed data.\r
+  @param  SourceSize  The size of source buffer.\r
   @param  Destination The destination buffer to store the decompressed data\r
   @param  Scratch     A temporary scratch buffer that is used to perform the decompression.\r
                       This is an optional parameter that may be NULL if the \r
@@ -185,24 +180,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 +208,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