summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Kristian Rosbach <hk-git@circlestorm.org>2019-07-18 16:17:49 +0200
committerHans Kristian Rosbach <hk-github@circlestorm.org>2019-08-06 09:39:26 +0200
commit4bc6ffa41a7a23e04a2da409ca512a73cf268382 (patch)
tree4bcc8edfb3630888d25ece2ab72683f391d8d490
parentd8eedcfa3e391cca6d247ebde2f5c64bd64582d6 (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.c52
-rw-r--r--inflate.c10
-rw-r--r--inflate.h1
3 files changed, 6 insertions, 57 deletions
diff --git a/infback.c b/infback.c
index e3886b5..27b7b9b 100644
--- a/infback.c
+++ b/infback.c
@@ -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()
*/
diff --git a/inflate.c b/inflate.c
index c07d149..8caacdd 100644
--- a/inflate.c
+++ b/inflate.c
@@ -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;
diff --git a/inflate.h b/inflate.h
index 01fb1f9..846fcdc 100644
--- a/inflate.h
+++ b/inflate.h
@@ -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_ */