This adds a new public API, deflateUsed(), so is technically a minor bump.
Nothing will be using this anytime soon, so no shared library bump.
discussed with deraadt during c2k24
return Z_OK;
}
+/* ========================================================================= */
+int ZEXPORT deflateUsed(z_streamp strm, int *bits) {
+ if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
+ if (bits != Z_NULL)
+ *bits = strm->state->bi_used;
+ return Z_OK;
+}
+
/* ========================================================================= */
int ZEXPORT deflatePrime(z_streamp strm, int bits, int value) {
deflate_state *s;
s->high_water = s->strstart;
/* If the last block was written to next_out, then done. */
- if (last)
+ if (last) {
+ s->bi_used = 8;
return finish_done;
+ }
/* If flushing and all input has been consumed, then done. */
if (flush != Z_NO_FLUSH && flush != Z_FINISH &&
}
/* We've done all we can with the available input and output. */
+ if (last)
+ s->bi_used = 8;
return last ? finish_started : need_more;
}
/* Number of valid bits in bi_buf. All bits above the last valid bit
* are always zero.
*/
+ int bi_used;
+ /* Last number of used bits when going to a byte boundary.
+ */
ulg high_water;
/* High water mark offset in window for initialized bytes -- bytes above
} else if (s->bi_valid > 0) {
put_byte(s, (Byte)s->bi_buf);
}
+ s->bi_used = ((s->bi_valid - 1) & 7) + 1;
s->bi_buf = 0;
s->bi_valid = 0;
#ifdef ZLIB_DEBUG
s->bi_buf = 0;
s->bi_valid = 0;
+ s->bi_used = 0;
#ifdef ZLIB_DEBUG
s->compressed_len = 0L;
s->bits_sent = 0L;
# define deflateSetDictionary z_deflateSetDictionary
# define deflateSetHeader z_deflateSetHeader
# define deflateTune z_deflateTune
+# define deflateUsed z_deflateUsed
# define deflate_copyright z_deflate_copyright
# define get_crc_table z_get_crc_table
# ifndef Z_SOLO
stream state was inconsistent.
*/
+ZEXTERN int ZEXPORT deflateUsed(z_streamp strm,
+ int *bits);
+/*
+ deflateUsed() returns in *bits the most recent number of deflate bits used
+ in the last byte when flushing to a byte boundary. The result is in 1..8, or
+ 0 if there has not yet been a flush. This helps determine the location of
+ the last bit of a deflate stream.
+
+ deflateUsed returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent.
+ */
+
ZEXTERN int ZEXPORT deflatePrime(z_streamp strm,
int bits,
int value);