diff --git a/archival/libarchive/bz/bzlib.c b/archival/libarchive/bz/bzlib.c index 9af2f026d..ef19ae165 100644 --- a/archival/libarchive/bz/bzlib.c +++ b/archival/libarchive/bz/bzlib.c @@ -99,9 +99,8 @@ void BZ2_bzCompressInit(bz_stream *strm, int blockSize100k) s->ptr = (uint32_t*)s->arr1; s->arr2 = xmalloc((n + BZ_N_OVERSHOOT) * sizeof(uint32_t)); s->block = (uint8_t*)s->arr2; - s->ftab = xmalloc(65537 * sizeof(uint32_t)); - s->crc32table = crc32_filltable(NULL, 1); + crc32_filltable(s->crc32table, 1); s->state = BZ_S_INPUT; s->mode = BZ_M_RUNNING; @@ -369,8 +368,8 @@ void BZ2_bzCompressEnd(bz_stream *strm) s = strm->state; free(s->arr1); free(s->arr2); - free(s->ftab); - free(s->crc32table); + //free(s->ftab); // made it array member of s + //free(s->crc32table); // ditto free(s); } diff --git a/archival/libarchive/bz/bzlib_private.h b/archival/libarchive/bz/bzlib_private.h index ea0f29b7c..650444a5c 100644 --- a/archival/libarchive/bz/bzlib_private.h +++ b/archival/libarchive/bz/bzlib_private.h @@ -134,7 +134,7 @@ typedef struct EState { /* for doing the block sorting */ uint32_t *arr1; uint32_t *arr2; - uint32_t *ftab; + //uint32_t *ftab; //moved into this struct, see below uint16_t *quadrant; int32_t budget; @@ -160,9 +160,6 @@ typedef struct EState { uint32_t bsBuff; int32_t bsLive; - /* guess what */ - uint32_t *crc32table; - /* block and combined CRCs */ uint32_t blockCRC; uint32_t combinedCRC; @@ -185,6 +182,12 @@ typedef struct EState { uint8_t len[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; + /* guess what */ + uint32_t crc32table[256]; + + /* for doing the block sorting */ + uint32_t ftab[65537]; + /* stack-saving measures: these can be local, but they are too big */ int32_t sendMTFValues__code [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; int32_t sendMTFValues__rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];