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;
	}
}
Example #2
0
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;
}
Example #3
0
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;
}