aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archival/libarchive/bz/compress.c36
1 files changed, 25 insertions, 11 deletions
diff --git a/archival/libarchive/bz/compress.c b/archival/libarchive/bz/compress.c
index 2d994685c..c640173e5 100644
--- a/archival/libarchive/bz/compress.c
+++ b/archival/libarchive/bz/compress.c
@@ -75,25 +75,39 @@ void bsW(EState* s, int32_t n, uint32_t v)
75 s->bsBuff |= (v << (32 - s->bsLive - n)); 75 s->bsBuff |= (v << (32 - s->bsLive - n));
76 s->bsLive += n; 76 s->bsLive += n;
77} 77}
78/* Same with n == 16: */
79static
80#if CONFIG_BZIP2_FAST >= 5
81ALWAYS_INLINE
82#endif
83void bsW16(EState* s, uint32_t v)
84{
85 while (s->bsLive >= 8) {
86 s->zbits[s->numZ] = (uint8_t)(s->bsBuff >> 24);
87 s->numZ++;
88 s->bsBuff <<= 8;
89 s->bsLive -= 8;
90 }
91 s->bsBuff |= (v << (16 - s->bsLive));
92 s->bsLive += 16;
93}
78 94
79 95
80/*---------------------------------------------------*/ 96/*---------------------------------------------------*/
81static 97static ALWAYS_INLINE
82void bsPutU32(EState* s, unsigned u) 98void bsPutU16(EState* s, unsigned u)
83{ 99{
84 bsW(s, 8, (u >> 24) & 0xff); 100 bsW16(s, u);
85 bsW(s, 8, (u >> 16) & 0xff);
86 bsW(s, 8, (u >> 8) & 0xff);
87 bsW(s, 8, u & 0xff);
88} 101}
89 102
90 103
91/*---------------------------------------------------*/ 104/*---------------------------------------------------*/
92static 105static
93void bsPutU16(EState* s, unsigned u) 106void bsPutU32(EState* s, unsigned u)
94{ 107{
95 bsW(s, 8, (u >> 8) & 0xff); 108 //bsW(s, 32, u); // can't use: may try "uint32 << -n"
96 bsW(s, 8, u & 0xff); 109 bsW16(s, (u >> 16) & 0xffff);
110 bsW16(s, u & 0xffff);
97} 111}
98 112
99 113
@@ -509,7 +523,7 @@ void sendMTFValues(EState* s)
509 } 523 }
510 } 524 }
511 525
512 bsW(s, 16, inUse16); 526 bsW16(s, inUse16);
513 527
514 inUse16 <<= (sizeof(int)*8 - 16); /* move 15th bit into sign bit */ 528 inUse16 <<= (sizeof(int)*8 - 16); /* move 15th bit into sign bit */
515 for (i = 0; i < 16; i++) { 529 for (i = 0; i < 16; i++) {
@@ -517,7 +531,7 @@ void sendMTFValues(EState* s)
517 unsigned v16 = 0; 531 unsigned v16 = 0;
518 for (j = 0; j < 16; j++) 532 for (j = 0; j < 16; j++)
519 v16 = v16*2 + s->inUse[i * 16 + j]; 533 v16 = v16*2 + s->inUse[i * 16 + j];
520 bsW(s, 16, v16); 534 bsW16(s, v16);
521 } 535 }
522 inUse16 <<= 1; 536 inUse16 <<= 1;
523 } 537 }