summaryrefslogtreecommitdiff
path: root/inflate.c
diff options
context:
space:
mode:
authorHans Kristian Rosbach <hk-git@circlestorm.org>2019-07-18 15:49:54 +0200
committerHans Kristian Rosbach <hk-github@circlestorm.org>2019-08-06 09:39:26 +0200
commitd8eedcfa3e391cca6d247ebde2f5c64bd64582d6 (patch)
treeb121c60680118650e865ba963291614e81c5fd41 /inflate.c
parentf06c71f9817700eccb507f54249a8c52335bf693 (diff)
Deduplicate common inflate/inflatefast/inflateBack macros into inflate_p.h
Diffstat (limited to 'inflate.c')
-rw-r--r--inflate.c90
1 files changed, 6 insertions, 84 deletions
diff --git a/inflate.c b/inflate.c
index f386f64..c07d149 100644
--- a/inflate.c
+++ b/inflate.c
@@ -85,6 +85,7 @@
#include "inftrees.h"
#include "inflate.h"
#include "inffast.h"
+#include "inflate_p.h"
#include "memcopy.h"
#include "functable.h"
@@ -461,66 +462,13 @@ static int updatewindow(PREFIX3(stream) *strm, const unsigned char *end, uint32_
return 0;
}
-/* Macros for inflate(): */
-/* check function to use adler32() for zlib or crc32() for gzip */
-#ifdef GUNZIP
-# define UPDATE(check, buf, len) \
- (state->flags ? PREFIX(crc32)(check, buf, len) : functable.adler32(check, buf, len))
-#else
-# define UPDATE(check, buf, len) functable.adler32(check, buf, len)
-#endif
-
-/* check macros for header crc */
-#ifdef GUNZIP
-# define CRC2(check, word) \
- do { \
- hbuf[0] = (unsigned char)(word); \
- hbuf[1] = (unsigned char)((word) >> 8); \
- check = PREFIX(crc32)(check, hbuf, 2); \
- } while (0)
-
-# define CRC4(check, word) \
- do { \
- hbuf[0] = (unsigned char)(word); \
- hbuf[1] = (unsigned char)((word) >> 8); \
- hbuf[2] = (unsigned char)((word) >> 16); \
- hbuf[3] = (unsigned char)((word) >> 24); \
- check = PREFIX(crc32)(check, hbuf, 4); \
- } while (0)
-#endif
-
-/* Load registers with state in inflate() for speed */
-#define LOAD() \
- do { \
- put = strm->next_out; \
- left = strm->avail_out; \
- next = strm->next_in; \
- have = strm->avail_in; \
- hold = state->hold; \
- bits = state->bits; \
- } while (0)
-
-/* Restore state from registers in inflate() */
-#define RESTORE() \
- do { \
- strm->next_out = put; \
- strm->avail_out = left; \
- strm->next_in = next; \
- strm->avail_in = have; \
- state->hold = hold; \
- state->bits = bits; \
- } while (0)
-
-/* Clear the input bit accumulator */
-#define INITBITS() \
- do { \
- hold = 0; \
- bits = 0; \
- } while (0)
+/*
+ Private macros for inflate()
+ Look in inflate_p.h for macros shared with inflateBack()
+*/
-/* Get a byte of input into the bit accumulator, or return from inflate()
- if there is no input available. */
+/* Get a byte of input into the bit accumulator, or return from inflate() if there is no input available. */
#define PULLBYTE() \
do { \
if (have == 0) goto inf_leave; \
@@ -529,32 +477,6 @@ static int updatewindow(PREFIX3(stream) *strm, const unsigned char *end, uint32_
bits += 8; \
} while (0)
-/* Assure that there are at least n bits in the bit accumulator. If there is
- not enough available input to do that, then return from inflate(). */
-#define NEEDBITS(n) \
- do { \
- while (bits < (unsigned)(n)) \
- PULLBYTE(); \
- } while (0)
-
-/* Return the low n bits of the bit accumulator (n < 16) */
-#define BITS(n) \
- (hold & ((1U << (n)) - 1))
-
-/* Remove n bits from the bit accumulator */
-#define DROPBITS(n) \
- do { \
- hold >>= (n); \
- bits -= (unsigned)(n); \
- } while (0)
-
-/* Remove zero to seven bits as needed to go to a byte boundary */
-#define BYTEBITS() \
- do { \
- hold >>= bits & 7; \
- bits -= bits & 7; \
- } while (0)
-
/*
inflate() uses a state machine to process as much input data and generate as
much output data as possible before returning. The state machine is