MCPcopy Create free account
hub / github.com/Kenix3/libultraship / LoadFilePatch_BSD0

Function LoadFilePatch_BSD0

extern/StormLib/src/SFilePatchArchives.cpp:159–202  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

157}
158
159static DWORD LoadFilePatch_BSD0(TMPQFile * hf, PMPQ_PATCH_HEADER pFullPatch)
160{
161 LPBYTE pbDecompressed = (LPBYTE)(pFullPatch + 1);
162 LPBYTE pbCompressed = NULL;
163 DWORD cbDecompressed = 0;
164 DWORD cbCompressed = 0;
165 DWORD dwBytesRead = 0;
166 DWORD dwErrCode = ERROR_SUCCESS;
167
168 // Calculate the size of compressed data
169 cbDecompressed = pFullPatch->dwSizeOfPatchData - sizeof(MPQ_PATCH_HEADER);
170 cbCompressed = pFullPatch->dwXfrmBlockSize - SIZE_OF_XFRM_HEADER;
171
172 // Is that file compressed?
173 if(cbCompressed < cbDecompressed)
174 {
175 pbCompressed = STORM_ALLOC(BYTE, cbCompressed);
176 if(pbCompressed == NULL)
177 dwErrCode = ERROR_NOT_ENOUGH_MEMORY;
178
179 // Read the compressed patch data
180 if(dwErrCode == ERROR_SUCCESS)
181 {
182 SFileReadFile((HANDLE)hf, pbCompressed, cbCompressed, &dwBytesRead, NULL);
183 if(dwBytesRead != cbCompressed)
184 dwErrCode = ERROR_FILE_CORRUPT;
185 }
186
187 // Decompress the data
188 if(dwErrCode == ERROR_SUCCESS)
189 Decompress_RLE(pbDecompressed, cbDecompressed, pbCompressed, cbCompressed);
190
191 if(pbCompressed != NULL)
192 STORM_FREE(pbCompressed);
193 }
194 else
195 {
196 SFileReadFile((HANDLE)hf, pbDecompressed, cbDecompressed, &dwBytesRead, NULL);
197 if(dwBytesRead != cbDecompressed)
198 dwErrCode = ERROR_FILE_CORRUPT;
199 }
200
201 return dwErrCode;
202}
203
204static DWORD ApplyFilePatch_COPY(
205 TMPQPatcher * pPatcher,

Callers 1

LoadFullFilePatchFunction · 0.85

Calls 2

SFileReadFileFunction · 0.85
Decompress_RLEFunction · 0.85

Tested by

no test coverage detected