gzip: code shrink
authorDenys Vlasenko <vda.linux@googlemail.com>
Wed, 31 Jan 2018 15:36:17 +0000 (16:36 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Wed, 31 Jan 2018 15:36:17 +0000 (16:36 +0100)
function                                             old     new   delta
flush_block                                          668     665      -3

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
archival/gzip.c

index 9dc31e30bb3f0f287503924e2582bc7e8b2e1aa6..c94fec48ded417825022a7b12a69903011483d7c 100644 (file)
@@ -617,8 +617,8 @@ static void copy_block(char *buf, unsigned len, int header)
        bi_windup();            /* align on byte boundary */
 
        if (header) {
-               put_16bit(len);
-               put_16bit(~len);
+               unsigned v = ((uint16_t)len) | ((~len) << 16);
+               put_32bit(v);
 #ifdef DEBUG
                G1.bits_sent += 2 * 16;
 #endif
@@ -1747,8 +1747,8 @@ static ulg flush_block(char *buf, ulg stored_len, int eof)
                if (buf == NULL)
                        bb_error_msg("block vanished");
 
-               copy_block(buf, (unsigned) stored_len, 0);      /* without header */
                G2.compressed_len = stored_len << 3;
+               copy_block(buf, (unsigned) stored_len, 0);      /* without header */
        } else if (stored_len + 4 <= opt_lenb && buf != NULL) {
                /* 4: two words for the lengths */
                /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
@@ -1758,9 +1758,8 @@ static ulg flush_block(char *buf, ulg stored_len, int eof)
                 * transform a block into a stored block.
                 */
                send_bits((STORED_BLOCK << 1) + eof, 3);        /* send block type */
-               G2.compressed_len = (G2.compressed_len + 3 + 7) & ~7L;
-               G2.compressed_len += (stored_len + 4) << 3;
-
+               G2.compressed_len = ((G2.compressed_len + 3 + 7) & ~7L)
+                               + ((stored_len + 4) << 3);
                copy_block(buf, (unsigned) stored_len, 1);      /* with header */
        } else if (static_lenb == opt_lenb) {
                send_bits((STATIC_TREES << 1) + eof, 3);