MCPcopy Create free account
hub / github.com/diasurgical/devilution / SCompDecompress2

Function SCompDecompress2

3rdParty/StormLib/src/SCompression.cpp:1037–1152  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1035}
1036
1037int STORMAPI SCompDecompress2(void * pvOutBuffer, int * pcbOutBuffer, void * pvInBuffer, int cbInBuffer)
1038{
1039 DECOMPRESS pfnDecompress1 = NULL;
1040 DECOMPRESS pfnDecompress2 = NULL;
1041 unsigned char * pbWorkBuffer = (unsigned char *)pvOutBuffer;
1042 unsigned char * pbInBuffer = (unsigned char *)pvInBuffer;
1043 int cbWorkBuffer = *pcbOutBuffer;
1044 int nResult;
1045 char CompressionMethod;
1046
1047 // Verify buffer sizes
1048 if(*pcbOutBuffer < cbInBuffer || cbInBuffer < 1)
1049 return 0;
1050
1051 // If the outputbuffer is as big as input buffer, just copy the block
1052 if(*pcbOutBuffer == cbInBuffer)
1053 {
1054 if(pvOutBuffer != pvInBuffer)
1055 memcpy(pvOutBuffer, pvInBuffer, cbInBuffer);
1056 return 1;
1057 }
1058
1059 // Get the compression methods
1060 CompressionMethod = *pbInBuffer++;
1061 cbInBuffer--;
1062
1063 // We only recognize a fixed set of compression methods
1064 switch((unsigned char)CompressionMethod)
1065 {
1066#ifdef FULL
1067 case MPQ_COMPRESSION_ZLIB:
1068 pfnDecompress1 = Decompress_ZLIB;
1069 break;
1070#endif
1071
1072 case MPQ_COMPRESSION_PKWARE:
1073 pfnDecompress1 = Decompress_PKLIB;
1074 break;
1075
1076#ifdef FULL
1077 case MPQ_COMPRESSION_BZIP2:
1078 pfnDecompress1 = Decompress_BZIP2;
1079 break;
1080
1081 case MPQ_COMPRESSION_LZMA:
1082 pfnDecompress1 = Decompress_LZMA;
1083 break;
1084
1085 case MPQ_COMPRESSION_SPARSE:
1086 pfnDecompress1 = Decompress_SPARSE;
1087 break;
1088
1089 case (MPQ_COMPRESSION_SPARSE | MPQ_COMPRESSION_ZLIB):
1090 pfnDecompress1 = Decompress_ZLIB;
1091 pfnDecompress2 = Decompress_SPARSE;
1092 break;
1093
1094 case (MPQ_COMPRESSION_SPARSE | MPQ_COMPRESSION_BZIP2):

Callers 4

LoadExtTableFunction · 0.85
LoadMpqTableFunction · 0.85
ReadMpqSectorsFunction · 0.85
ReadMpqFileSingleUnitFunction · 0.85

Calls 1

SetLastErrorFunction · 0.85

Tested by

no test coverage detected