#include #include #include #include "zutil.h" int main(void) { unsigned char plain[32]; unsigned char compressed[130]; PREFIX3(stream) strm; int bound; z_size_t bytes; for (int i = 0; i <= 32; i++) { memset(plain, 6, i); memset(&strm, 0, sizeof(strm)); PREFIX(deflateInit2)(&strm, 0, 8, 31, 1, Z_DEFAULT_STRATEGY); bound = PREFIX(deflateBound)(&strm, i); strm.next_in = plain; strm.next_out = compressed; strm.avail_in = i; strm.avail_out = sizeof(compressed); if (PREFIX(deflate)(&strm, Z_FINISH) != Z_STREAM_END) return -1; if (strm.avail_in != 0) return -1; printf("bytes = %2i, deflateBound = %2i, total_out = %2zi\n", i, bound, strm.total_out); if (bound < strm.total_out) return -1; if (PREFIX(deflateEnd)(&strm) != Z_OK) return -1; } for (int i = 0; i <= 32; i++) { bytes = sizeof(compressed); for (int j = 0; j < i; j++) { plain[j] = j; } bound = PREFIX(compressBound)(i); if (PREFIX(compress2)(compressed, &bytes, plain, i, 1) != Z_OK) return -1; printf("bytes = %2i, compressBound = %2i, total_out = %2zi\n", i, bound, (size_t)bytes); if (bytes > bound) return -1; } return 0; }