|
|
@ -122,6 +122,7 @@ extern "C" { |
|
|
|
|
|
|
|
struct sinfl { |
|
|
|
const unsigned char *bitptr; |
|
|
|
const unsigned char *bitend; // @raysan5: added |
|
|
|
unsigned long long bitbuf; |
|
|
|
int bitcnt; |
|
|
|
|
|
|
@ -185,9 +186,10 @@ sinfl_read64(const void *p) { |
|
|
|
} |
|
|
|
static void |
|
|
|
sinfl_copy64(unsigned char **dst, unsigned char **src) { |
|
|
|
unsigned long long n; |
|
|
|
memcpy(&n, *src, 8); |
|
|
|
memcpy(*dst, &n, 8); |
|
|
|
//unsigned long long n; |
|
|
|
//memcpy(&n, *src, 8); |
|
|
|
//memcpy(*dst, &n, 8); |
|
|
|
memcpy(*dst, *src, 8); // @raysan5 |
|
|
|
*dst += 8, *src += 8; |
|
|
|
} |
|
|
|
static unsigned char* |
|
|
@ -210,9 +212,22 @@ sinfl_copy128(unsigned char **dst, unsigned char **src) { |
|
|
|
#endif |
|
|
|
static void |
|
|
|
sinfl_refill(struct sinfl *s) { |
|
|
|
s->bitbuf |= sinfl_read64(s->bitptr) << s->bitcnt; |
|
|
|
s->bitptr += (63 - s->bitcnt) >> 3; |
|
|
|
s->bitcnt |= 56; /* bitcount in range [56,63] */ |
|
|
|
if (s->bitend - s->bitptr >= 8) { |
|
|
|
// @raysan5: original code, only those 3 lines |
|
|
|
s->bitbuf |= sinfl_read64(s->bitptr) << s->bitcnt; |
|
|
|
s->bitptr += (63 - s->bitcnt) >> 3; |
|
|
|
s->bitcnt |= 56; /* bitcount in range [56,63] */ |
|
|
|
} else { |
|
|
|
// @raysan5: added this case when bits remaining < 8 |
|
|
|
int bitswant = 63 - s->bitcnt; |
|
|
|
int byteswant = bitswant >> 3; |
|
|
|
int bytesuse = s->bitend - s->bitptr <= byteswant ? (int)(s->bitend - s->bitptr) : byteswant; |
|
|
|
unsigned long long n = 0; |
|
|
|
memcpy(&n, s->bitptr, bytesuse); |
|
|
|
s->bitbuf |= n << s->bitcnt; |
|
|
|
s->bitptr += bytesuse; |
|
|
|
s->bitcnt += bytesuse << 3; |
|
|
|
} |
|
|
|
} |
|
|
|
static int |
|
|
|
sinfl_peek(struct sinfl *s, int cnt) { |
|
|
@ -384,6 +399,7 @@ sinfl_decompress(unsigned char *out, int cap, const unsigned char *in, int size) |
|
|
|
int last = 0; |
|
|
|
|
|
|
|
s.bitptr = in; |
|
|
|
s.bitend = e; // @raysan5: added |
|
|
|
while (1) { |
|
|
|
switch (state) { |
|
|
|
case hdr: { |
|
|
|