UclInSaveFile::UclInSaveFile(const char *filename, Gs2dScreen *screen, McAccess *mc) { _screen = screen; _mc = mc; int fd = _mc->open(filename, O_RDONLY); _buf = NULL; _bufSize = _bufPos = 0; _ioFailed = false; if (fd >= 0) { int srcSize = _mc->size(fd); if (srcSize > 8) { int res; uint8 *tmpBuf = (uint8*)memalign(64, srcSize); res = _mc->read(fd, tmpBuf, srcSize); if ((res == srcSize) && (*(uint32*)tmpBuf == UCL_MAGIC)) { uint32 resLen = _bufSize = *(uint32*)(tmpBuf + 4); _buf = (uint8*)malloc(_bufSize + 2048); res = ucl_nrv2e_decompress_8(tmpBuf + 8, srcSize - 8, _buf, &resLen, NULL); if ((res < 0) || (resLen != _bufSize)) { printf("Unable to decompress file %s (%d -> %d) error code %d\n", filename, srcSize, _bufSize, res); free(_buf); _buf = NULL; _bufSize = 0; } } free(tmpBuf); } _mc->close(fd); } if (!_buf) { printf("Invalid savegame %s\n", filename); _ioFailed = true; } }
int64_t lzbench_ucl_nrv2e_decompress(char *inbuf, size_t insize, char *outbuf, size_t outsize, size_t level, size_t, char*) { ucl_uint decomplen; int res = ucl_nrv2e_decompress_8((uint8_t*)inbuf, insize, (uint8_t*)outbuf, &decomplen, NULL); if (res != UCL_E_OK) return 0; return decomplen; }
int64_t lzbench_ucl_decompress(char *inbuf, size_t insize, char *outbuf, size_t outsize, size_t algo, size_t level, size_t) { ucl_uint decomplen; int res; switch (algo) { default: case 1: res = ucl_nrv2b_decompress_8((uint8_t*)inbuf, insize, (uint8_t*)outbuf, &decomplen, NULL); break; case 2: res = ucl_nrv2d_decompress_8((uint8_t*)inbuf, insize, (uint8_t*)outbuf, &decomplen, NULL); break; case 3: res = ucl_nrv2e_decompress_8((uint8_t*)inbuf, insize, (uint8_t*)outbuf, &decomplen, NULL); break; } if (res != UCL_E_OK) return 0; return decomplen; }