/* trees.c -- output deflated data using Huffman coding
- * Copyright (C) 1992-1993 Jean-loup Gailly
- * This is free software; you can redistribute it and/or modify it under the
- * terms of the GNU General Public License, see the file COPYING.
- */
+
+ Copyright (C) 1997-1999, 2009-2010 Free Software Foundation, Inc.
+ Copyright (C) 1992-1993 Jean-loup Gailly
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
/*
* PURPOSE
* void ct_tally (int dist, int lc);
* Save the match info and tally the frequency counts.
*
- * off_t flush_block (char *buf, ulg stored_len, int pad, int eof)
+ * off_t flush_block (char *buf, ulg stored_len, int eof)
* Determine the best encoding for the current block: dynamic trees,
* static trees or store, and output the encoded block to the zip
- * file. If pad is set, pads the block to the next
- * byte. Returns the total compressed length for the file so
- * far.
- * */
+ * file. Returns the total compressed length for the file so far.
+ *
+ */
#include <config.h>
#include <ctype.h>
#include "tailor.h"
#include "gzip.h"
-#ifdef RCSID
-static char rcsid[] = "$Id: trees.c,v 0.12 1993/06/10 13:27:54 jloup Exp $";
-#endif
-
/* ===========================================================================
* Constants
*/
file_type = attr;
file_method = methodp;
compressed_len = input_len = 0L;
-
+
if (static_dtree[0].Len != 0) return; /* ct_init already called */
/* Initialize the mapping length (0..255) -> length code (0..28) */
* 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, pad, eof)
+off_t flush_block(buf, stored_len, 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 */
if (stored_len <= opt_lenb && eof && compressed_len == 0L && seekable()) {
#endif
/* Since LIT_BUFSIZE <= 2*WSIZE, the input data must be there: */
- if (buf == (char*)0) error ("block vanished");
+ if (!buf)
+ gzip_error ("block vanished");
copy_block(buf, (unsigned)stored_len, 0); /* without header */
compressed_len = stored_len << 3;
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;