X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=trees.c;h=025d5ba2623c9ab82a6f6dea312195023416f13d;hb=357a301170a6a584ee28c92edc9f2d385bbf8d85;hp=f2ad3602f50763cbd34751eb0fa1b846e42f44c4;hpb=d57728a6ca2413a7c564d8b7bb13d9e5a5a180f3;p=debian%2Fgzip diff --git a/trees.c b/trees.c index f2ad360..025d5ba 100644 --- a/trees.c +++ b/trees.c @@ -1,6 +1,6 @@ /* trees.c -- output deflated data using Huffman coding - Copyright (C) 1997-1999, 2009-2013 Free Software Foundation, Inc. + Copyright (C) 1997-1999, 2009-2016 Free Software Foundation, Inc. Copyright (C) 1992-1993 Jean-loup Gailly This program is free software; you can redistribute it and/or modify @@ -856,9 +856,10 @@ local void send_all_trees(lcodes, dcodes, blcodes) * trees or store, and output the encoded block to the zip file. This function * returns the total compressed length for the file so far. */ -off_t flush_block(buf, stored_len, eof) +off_t flush_block(buf, stored_len, pad, eof) char *buf; /* input block, or NULL if too old */ ulg stored_len; /* length of input block */ + int pad; /* pad output to byte boundary */ int eof; /* true if this is the last block for a file */ { ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ @@ -951,6 +952,10 @@ off_t flush_block(buf, stored_len, eof) Assert (input_len == bytes_in, "bad input size"); bi_windup(); compressed_len += 7; /* align on byte boundary */ + } else if (pad && (compressed_len % 8) != 0) { + send_bits((STORED_BLOCK<<1)+eof, 3); /* send block type */ + compressed_len = (compressed_len + 3 + 7) & ~7L; + copy_block(buf, 0, 1); /* with header */ } return compressed_len >> 3;