diff options
author | Denys Vlasenko | 2018-02-03 01:30:12 +0100 |
---|---|---|
committer | Denys Vlasenko | 2018-02-03 01:30:12 +0100 |
commit | e594fb2171a40d6d8f438140440b6c6b1dad5c41 (patch) | |
tree | a3ef3ae4a472bd7b76496ec386a0fcc7a4226004 | |
parent | 125c3ff4b10ee36b757924b3c55b3ac34e902120 (diff) | |
download | busybox-e594fb2171a40d6d8f438140440b6c6b1dad5c41.zip busybox-e594fb2171a40d6d8f438140440b6c6b1dad5c41.tar.gz |
bzip2: code shrink
function old new delta
BZ2_compressBlock 225 230 +5
handle_compress 356 355 -1
bsW16 59 56 -3
bsW 64 61 -3
bsFinishWrite 37 32 -5
prepare_new_block 48 34 -14
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/5 up/down: 5/-26) Total: -21 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | archival/libarchive/bz/bzlib.c | 18 | ||||
-rw-r--r-- | archival/libarchive/bz/bzlib_private.h | 5 | ||||
-rw-r--r-- | archival/libarchive/bz/compress.c | 13 |
3 files changed, 18 insertions, 18 deletions
diff --git a/archival/libarchive/bz/bzlib.c b/archival/libarchive/bz/bzlib.c index 5f7db74..3572474 100644 --- a/archival/libarchive/bz/bzlib.c +++ b/archival/libarchive/bz/bzlib.c @@ -55,8 +55,9 @@ void prepare_new_block(EState* s) { int i; s->nblock = 0; - s->numZ = 0; - s->state_out_pos = 0; + //indexes inot s->zbits[], initialzation moved to init of s->zbits + //s->posZ = s->zbits; // was: s->numZ = 0; + //s->state_out_pos = s->zbits; BZ_INITIALISE_CRC(s->blockCRC); /* inlined memset would be nice to have here */ for (i = 0; i < 256; i++) @@ -237,11 +238,10 @@ void /*Bool*/ copy_output_until_stop(EState* s) if (s->strm->avail_out == 0) break; /*-- block done? --*/ - if (s->state_out_pos >= s->numZ) break; + if (s->state_out_pos >= s->posZ) break; /*progress_out = True;*/ - *(s->strm->next_out) = s->zbits[s->state_out_pos]; - s->state_out_pos++; + *(s->strm->next_out) = *s->state_out_pos++; s->strm->avail_out--; s->strm->next_out++; s->strm->total_out++; @@ -261,7 +261,7 @@ void /*Bool*/ handle_compress(bz_stream *strm) while (1) { if (s->state == BZ_S_OUTPUT) { /*progress_out |=*/ copy_output_until_stop(s); - if (s->state_out_pos < s->numZ) break; + if (s->state_out_pos < s->posZ) break; if (s->mode == BZ_M_FINISHING //# && s->avail_in_expect == 0 && s->strm->avail_in == 0 @@ -336,7 +336,7 @@ int BZ2_bzCompress(bz_stream *strm, int action) /*if (s->avail_in_expect != s->strm->avail_in) return BZ_SEQUENCE_ERROR;*/ /*progress =*/ handle_compress(strm); - if (s->avail_in_expect > 0 || !isempty_RL(s) || s->state_out_pos < s->numZ) + if (s->avail_in_expect > 0 || !isempty_RL(s) || s->state_out_pos < s->posZ) return BZ_FLUSH_OK; s->mode = BZ_M_RUNNING; return BZ_RUN_OK; @@ -349,9 +349,9 @@ int BZ2_bzCompress(bz_stream *strm, int action) return BZ_SEQUENCE_ERROR;*/ /*progress =*/ handle_compress(strm); /*if (!progress) return BZ_SEQUENCE_ERROR;*/ - //#if (s->avail_in_expect > 0 || !isempty_RL(s) || s->state_out_pos < s->numZ) + //#if (s->avail_in_expect > 0 || !isempty_RL(s) || s->state_out_pos < s->posZ) //# return BZ_FINISH_OK; - if (s->strm->avail_in > 0 || !isempty_RL(s) || s->state_out_pos < s->numZ) + if (s->strm->avail_in > 0 || !isempty_RL(s) || s->state_out_pos < s->posZ) return BZ_FINISH_OK; /*s->mode = BZ_M_IDLE;*/ return BZ_STREAM_END; diff --git a/archival/libarchive/bz/bzlib_private.h b/archival/libarchive/bz/bzlib_private.h index 43e674b..8e44a8e 100644 --- a/archival/libarchive/bz/bzlib_private.h +++ b/archival/libarchive/bz/bzlib_private.h @@ -150,8 +150,9 @@ typedef struct EState { /* input and output limits and current posns */ int32_t nblock; int32_t nblockMAX; - int32_t numZ; - int32_t state_out_pos; + //int32_t numZ; // index into s->zbits[], replaced by pointer: + uint8_t *posZ; + uint8_t *state_out_pos; /* the buffer for bit stream creation */ uint32_t bsBuff; diff --git a/archival/libarchive/bz/compress.c b/archival/libarchive/bz/compress.c index c640173..534cf66 100644 --- a/archival/libarchive/bz/compress.c +++ b/archival/libarchive/bz/compress.c @@ -50,8 +50,7 @@ static NOINLINE void bsFinishWrite(EState* s) { while (s->bsLive > 0) { - s->zbits[s->numZ] = (uint8_t)(s->bsBuff >> 24); - s->numZ++; + *s->posZ++ = (uint8_t)(s->bsBuff >> 24); s->bsBuff <<= 8; s->bsLive -= 8; } @@ -67,8 +66,7 @@ ALWAYS_INLINE void bsW(EState* s, int32_t n, uint32_t v) { while (s->bsLive >= 8) { - s->zbits[s->numZ] = (uint8_t)(s->bsBuff >> 24); - s->numZ++; + *s->posZ++ = (uint8_t)(s->bsBuff >> 24); s->bsBuff <<= 8; s->bsLive -= 8; } @@ -83,8 +81,7 @@ ALWAYS_INLINE void bsW16(EState* s, uint32_t v) { while (s->bsLive >= 8) { - s->zbits[s->numZ] = (uint8_t)(s->bsBuff >> 24); - s->numZ++; + *s->posZ++ = (uint8_t)(s->bsBuff >> 24); s->bsBuff <<= 8; s->bsLive -= 8; } @@ -624,12 +621,14 @@ void BZ2_compressBlock(EState* s, int is_last_block) s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31); s->combinedCRC ^= s->blockCRC; if (s->blockNo > 1) - s->numZ = 0; + s->posZ = s->zbits; // was: s->numZ = 0; BZ2_blockSort(s); } s->zbits = &((uint8_t*)s->arr2)[s->nblock]; + s->posZ = s->zbits; + s->state_out_pos = s->zbits; /*-- If this is the first block, create the stream header. --*/ if (s->blockNo == 1) { |