This commit is contained in:
twinaphex 2015-07-02 05:18:41 +02:00
parent 0c6809952d
commit eae59d6424

View File

@ -64,10 +64,14 @@ size thisstart;
size_t state_manager_raw_maxsize(size_t uncomp) size_t state_manager_raw_maxsize(size_t uncomp)
{ {
const int maxcblkcover = UINT16_MAX * sizeof(uint16_t); /* bytes covered by a compressed block */ /* bytes covered by a compressed block */
size_t uncomp16 = (uncomp + sizeof(uint16_t) - 1) & ~sizeof(uint16_t); /* uncompressed size, rounded to 16 bits */ const int maxcblkcover = UINT16_MAX * sizeof(uint16_t);
size_t maxcblks = (uncomp + maxcblkcover - 1) / maxcblkcover; /* number of blocks */ /* uncompressed size, rounded to 16 bits */
return uncomp16 + maxcblks * sizeof(uint16_t)*2 /* two u16 overhead per block */ + sizeof(uint16_t)*3; /* three u16 to end it */ size_t uncomp16 = (uncomp + sizeof(uint16_t) - 1) & ~sizeof(uint16_t);
/* number of blocks */
size_t maxcblks = (uncomp + maxcblkcover - 1) / maxcblkcover;
return uncomp16 + maxcblks * sizeof(uint16_t) * 2 /* two u16 overhead per block */ + sizeof(uint16_t) *
3; /* three u16 to end it */
} }
void *state_manager_raw_alloc(size_t len, uint16_t uniq) void *state_manager_raw_alloc(size_t len, uint16_t uniq)
@ -276,7 +280,8 @@ size_t state_manager_raw_compress(const void *src, const void *dst, size_t len,
return (uint8_t*)(compressed16+3) - (uint8_t*)patch; return (uint8_t*)(compressed16+3) - (uint8_t*)patch;
} }
void state_manager_raw_decompress(const void *patch, size_t patchlen, void *data, size_t datalen) void state_manager_raw_decompress(const void *patch,
size_t patchlen, void *data, size_t datalen)
{ {
uint16_t *out16 = (uint16_t*)data; uint16_t *out16 = (uint16_t*)data;
const uint16_t *patch16 = (const uint16_t*)patch; const uint16_t *patch16 = (const uint16_t*)patch;