# HG changeset patch # User Matti Hamalainen # Date 1425247393 -7200 # Node ID d36bf7514614e827ffe0319f6e93b052fccb67d6 # Parent 43905dacb365dc17409e1680cba1c864480892ea Add some constants and make initialization one-time only. diff -r 43905dacb365 -r d36bf7514614 src/dmzlib.c --- a/src/dmzlib.c Mon Mar 02 00:02:24 2015 +0200 +++ b/src/dmzlib.c Mon Mar 02 00:03:13 2015 +0200 @@ -26,8 +26,8 @@ int i; // Use <= to match clearly with DEFLATE spec - if ((dm_zdefault_length = dmMalloc(288)) == NULL || - (dm_zdefault_distance = dmMalloc(32)) == NULL) + if ((dm_zdefault_length = dmMalloc(DM_ZLIB_HUFF_CODES)) == NULL || + (dm_zdefault_distance = dmMalloc(DM_ZLIB_HUFF_DIST)) == NULL) { return dmErrorDBG(DMERR_MALLOC, "Failed to allocate zlib decompression tables.\n"); @@ -150,6 +150,7 @@ } } + ctx->initialized = TRUE; return DMERR_OK; } @@ -527,13 +528,13 @@ return DMERR_INVALID_DATA; else { - if (type == 1) + if (type == 1 && !ctx->zlength.initialized) { // use fixed code lengths - if ((ret = dmZLibBuildHuffmanTables(&ctx->zlength, dm_zdefault_length, 288)) != DMERR_OK) + if ((ret = dmZLibBuildHuffmanTables(&ctx->zlength, dm_zdefault_length, DM_ZLIB_HUFF_CODES)) != DMERR_OK) return ret; - if ((ret = dmZLibBuildHuffmanTables(&ctx->zdistance, dm_zdefault_distance, 32)) != DMERR_OK) + if ((ret = dmZLibBuildHuffmanTables(&ctx->zdistance, dm_zdefault_distance, DM_ZLIB_HUFF_DIST)) != DMERR_OK) return ret; } else diff -r 43905dacb365 -r d36bf7514614 src/dmzlib.h --- a/src/dmzlib.h Mon Mar 02 00:02:24 2015 +0200 +++ b/src/dmzlib.h Mon Mar 02 00:03:13 2015 +0200 @@ -18,15 +18,20 @@ #define DM_ZLIB_HFAST_SIZE (1 << DM_ZLIB_HFAST_BITS) #define DM_ZLIB_HFAST_MASK (DM_ZLIB_HFAST_SIZE - 1) +#define DM_ZLIB_HUFF_CODES (288) +#define DM_ZLIB_HUFF_DIST (32) typedef struct { + BOOL initialized; + Uint16 fast[DM_ZLIB_HFAST_SIZE]; Uint16 firstCode[16]; int maxCode[16 + 1]; Uint16 firstSymbol[16]; - Uint8 size[288]; - Uint16 value[288]; + + Uint8 size[DM_ZLIB_HUFF_CODES]; + Uint16 value[DM_ZLIB_HUFF_CODES]; } DMZHuffmanContext;