]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaDecompress.c
Update the copyright notice format
[mirror_edk2.git] / IntelFrameworkModulePkg / Library / LzmaCustomDecompressLib / LzmaDecompress.c
index b8523f4b4fe2a227a7cabaafe7df39bc5f98146f..e32b6a3025b07f39a485e62dfc8917293ab4e6e5 100644 (file)
@@ -1,8 +1,8 @@
 /** @file\r
   LZMA Decompress interfaces\r
 \r
-  Copyright (c) 2009, Intel Corporation<BR>\r
-  All rights reserved. This program and the accompanying materials\r
+  Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  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
   http://opensource.org/licenses/bsd-license.php\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