#define MAXMATCH 256\r
#define THRESHOLD 3\r
#define CODE_BIT 16\r
-#define UINT8_MAX 0xff\r
#define BAD_TABLE - 1\r
\r
//\r
UINT8 mPBit;\r
} SCRATCH_DATA;\r
\r
-STATIC\r
VOID\r
FillBuf (\r
IN SCRATCH_DATA *Sd,\r
Sd->mBitBuf |= Sd->mSubBitBuf >> Sd->mBitCount;\r
}\r
\r
-STATIC\r
UINT32\r
GetBits (\r
IN SCRATCH_DATA *Sd,\r
return OutBits;\r
}\r
\r
-STATIC\r
UINT16\r
MakeTable (\r
IN SCRATCH_DATA *Sd,\r
UINT16 Start[18];\r
UINT16 *Pointer;\r
UINT16 Index3;\r
- UINT16 Index;\r
+ volatile UINT16 Index;\r
UINT16 Len;\r
UINT16 Char;\r
UINT16 JuBits;\r
UINT16 Avail;\r
UINT16 NextCode;\r
UINT16 Mask;\r
+ UINT16 WordOfStart;\r
+ UINT16 WordOfCount;\r
\r
for (Index = 1; Index <= 16; Index++) {\r
Count[Index] = 0;\r
- }\r
+ } \r
\r
for (Index = 0; Index < NumOfChar; Index++) {\r
Count[BitLen[Index]]++;\r
Start[1] = 0;\r
\r
for (Index = 1; Index <= 16; Index++) {\r
- Start[Index + 1] = (UINT16) (Start[Index] + (Count[Index] << (16 - Index)));\r
+ WordOfStart = Start[Index];\r
+ WordOfCount = Count[Index];\r
+ Start[Index + 1] = (UINT16) (WordOfStart + (WordOfCount << (16 - Index)));\r
}\r
\r
if (Start[17] != 0) {\r
}\r
\r
while (Index <= 16) {\r
- Weight[Index++] = (UINT16) (1U << (16 - Index));\r
+ Weight[Index] = (UINT16) (1U << (16 - Index));\r
+ Index++;\r
}\r
\r
Index = (UINT16) (Start[TableBits + 1] >> JuBits);\r
return 0;\r
}\r
\r
-STATIC\r
UINT32\r
DecodeP (\r
IN SCRATCH_DATA *Sd\r
return Pos;\r
}\r
\r
-STATIC\r
UINT16\r
ReadPTLen (\r
IN SCRATCH_DATA *Sd,\r
{\r
UINT16 Number;\r
UINT16 CharC;\r
- UINT16 Index;\r
+ volatile UINT16 Index;\r
UINT32 Mask;\r
\r
Number = (UINT16) GetBits (Sd, nbit);\r
return MakeTable (Sd, nn, Sd->mPTLen, 8, Sd->mPTTable);\r
}\r
\r
-STATIC\r
VOID\r
ReadCLen (\r
SCRATCH_DATA *Sd\r
{\r
UINT16 Number;\r
UINT16 CharC;\r
- UINT16 Index;\r
+ volatile UINT16 Index;\r
UINT32 Mask;\r
\r
Number = (UINT16) GetBits (Sd, CBIT);\r
return ;\r
}\r
\r
-STATIC\r
UINT16\r
DecodeC (\r
SCRATCH_DATA *Sd\r
return Index2;\r
}\r
\r
-STATIC\r
VOID\r
Decode (\r
SCRATCH_DATA *Sd\r
for (;;) {\r
CharC = DecodeC (Sd);\r
if (Sd->mBadTableFlag != 0) {\r
- return ;\r
+ goto Done ;\r
}\r
\r
if (CharC < 256) {\r
// Process an Original character\r
//\r
if (Sd->mOutBuf >= Sd->mOrigSize) {\r
- return ;\r
+ goto Done ;\r
} else {\r
Sd->mDstBase[Sd->mOutBuf++] = (UINT8) CharC;\r
}\r
//\r
// Process a Pointer\r
//\r
- CharC = (UINT16) (CharC - (UINT8_MAX + 1 - THRESHOLD));\r
+ CharC = (UINT16) (CharC - (BIT8 - THRESHOLD));\r
\r
BytesRemain = CharC;\r
\r
while ((INT16) (BytesRemain) >= 0) {\r
Sd->mDstBase[Sd->mOutBuf++] = Sd->mDstBase[DataIdx++];\r
if (Sd->mOutBuf >= Sd->mOrigSize) {\r
- return ;\r
+ goto Done ;\r
}\r
\r
BytesRemain--;\r
}\r
}\r
\r
+Done:\r
return ;\r
}\r
\r
\r
--*/\r
{\r
- UINT32 Index;\r
UINT32 CompSize;\r
UINT32 OrigSize;\r
EFI_STATUS Status;\r
SCRATCH_DATA *Sd;\r
UINT8 *Src;\r
UINT8 *Dst;\r
-\r
+ volatile UINT32 Index;\r
+ \r
Status = EFI_SUCCESS;\r
Src = Source;\r
Dst = Destination;\r
for (Index = 0; Index < sizeof (SCRATCH_DATA); Index++) {\r
((UINT8 *) Sd)[Index] = 0;\r
}\r
+ \r
//\r
// The length of the field 'Position Set Code Length Array Size' in Block Header.\r
// For EFI 1.1 de/compression algorithm(Version 1), mPBit = 4\r