| 157 | } |
| 158 | |
| 159 | static 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 | |
| 204 | static DWORD ApplyFilePatch_COPY( |
| 205 | TMPQPatcher * pPatcher, |
no test coverage detected