diff options
author | Hans Kristian Rosbach <hk-git@circlestorm.org> | 2019-07-18 16:17:49 +0200 |
---|---|---|
committer | Hans Kristian Rosbach <hk-github@circlestorm.org> | 2019-08-06 09:39:26 +0200 |
commit | 4bc6ffa41a7a23e04a2da409ca512a73cf268382 (patch) | |
tree | 4bcc8edfb3630888d25ece2ab72683f391d8d490 | |
parent | d8eedcfa3e391cca6d247ebde2f5c64bd64582d6 (diff) |
Deduplicate inflate's fixedtables(), and no longer inline the inffixed tables.
This also reduces the library size by 4120bytes or ~2.9%.
-rw-r--r-- | infback.c | 52 | ||||
-rw-r--r-- | inflate.c | 10 | ||||
-rw-r--r-- | inflate.h | 1 |
3 files changed, 6 insertions, 57 deletions
@@ -17,9 +17,6 @@ #include "inffast.h" #include "inflate_p.h" -/* function prototypes */ -static void fixedtables(struct inflate_state *state); - /* strm provides memory allocation functions in zalloc and zfree, or NULL to use the library memory allocation functions. @@ -57,55 +54,6 @@ int ZEXPORT PREFIX(inflateBackInit_)(PREFIX3(stream) *strm, int windowBits, unsi } /* - Return state with length and distance decoding tables and index sizes set to - fixed code decoding. Normally this returns fixed tables from inffixed.h. - If BUILDFIXED is defined, then instead this routine builds the tables the - first time it's called, and returns those tables the first time and - thereafter. This reduces the size of the code by about 2K bytes, in - exchange for a little execution time. However, BUILDFIXED should not be - used for threaded applications, since the rewriting of the tables and virgin - may not be thread-safe. - */ -static void fixedtables(struct inflate_state *state) { -#ifdef BUILDFIXED - static int virgin = 1; - static code *lenfix, *distfix; - static code fixed[544]; - - /* build fixed huffman tables if first call (may not be thread safe) */ - if (virgin) { - unsigned sym, bits; - static code *next; - - /* literal/length table */ - sym = 0; - while (sym < 144) state->lens[sym++] = 8; - while (sym < 256) state->lens[sym++] = 9; - while (sym < 280) state->lens[sym++] = 7; - while (sym < 288) state->lens[sym++] = 8; - next = fixed; - lenfix = next; - bits = 9; - zng_inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work); - - /* distance table */ - sym = 0; - while (sym < 32) state->lens[sym++] = 5; - distfix = next; - bits = 5; - zng_inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work); - - /* do this just once */ - virgin = 0; - } -#else /* !BUILDFIXED */ -# include "inffixed.h" -#endif /* BUILDFIXED */ - state->lencode = lenfix; - state->lenbits = 9; - state->distcode = distfix; - state->distbits = 5; -} Private macros for inflateBack() Look in inflate_p.h for macros shared with inflate() */ @@ -122,12 +122,13 @@ /* function prototypes */ static int inflateStateCheck(PREFIX3(stream) *strm); -static void fixedtables(struct inflate_state *state); static int updatewindow(PREFIX3(stream) *strm, const unsigned char *end, uint32_t copy); +static uint32_t syncsearch(uint32_t *have, const unsigned char *buf, uint32_t len); #ifdef BUILDFIXED void makefixed(void); +#else +# include "inffixed.h" #endif -static uint32_t syncsearch(uint32_t *have, const unsigned char *buf, uint32_t len); static int inflateStateCheck(PREFIX3(stream) *strm) { struct inflate_state *state; @@ -283,7 +284,8 @@ int ZEXPORT PREFIX(inflatePrime)(PREFIX3(stream) *strm, int bits, int value) { used for threaded applications, since the rewriting of the tables and virgin may not be thread-safe. */ -static void fixedtables(struct inflate_state *state) { + +void ZLIB_INTERNAL fixedtables(struct inflate_state *state) { #ifdef BUILDFIXED static int virgin = 1; static code *lenfix, *distfix; @@ -315,8 +317,6 @@ static void fixedtables(struct inflate_state *state) { /* do this just once */ virgin = 0; } -#else /* !BUILDFIXED */ -# include "inffixed.h" #endif /* BUILDFIXED */ state->lencode = lenfix; state->lenbits = 9; @@ -128,5 +128,6 @@ struct inflate_state { }; int ZLIB_INTERNAL inflate_ensure_window(struct inflate_state *state); +void ZLIB_INTERNAL fixedtables(struct inflate_state *state); #endif /* INFLATE_H_ */ |