diff options
Diffstat (limited to 'google/compression_utils_portable.cc')
-rw-r--r-- | google/compression_utils_portable.cc | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/google/compression_utils_portable.cc b/google/compression_utils_portable.cc index 21338b5..191e349 100644 --- a/google/compression_utils_portable.cc +++ b/google/compression_utils_portable.cc @@ -66,20 +66,28 @@ int GzipCompressHelper(Bytef* dest, void* (*malloc_fn)(size_t), void (*free_fn)(void*)) { return CompressHelper(GZIP, dest, dest_length, source, source_length, - malloc_fn, free_fn); + Z_DEFAULT_COMPRESSION, malloc_fn, free_fn); } // This code is taken almost verbatim from third_party/zlib/compress.c. The only // difference is deflateInit2() is called which allows different window bits to // be set. > 16 causes a gzip header to be emitted rather than a zlib header, // and negative causes no header to emitted. +// +// Compression level can be a number from 1-9, with 1 being the fastest, 9 being +// the best compression. The default, which the GZIP helper uses, is 6. int CompressHelper(WrapperType wrapper_type, Bytef* dest, uLongf* dest_length, const Bytef* source, uLong source_length, + int compression_level, void* (*malloc_fn)(size_t), void (*free_fn)(void*)) { + if (compression_level < 1 || compression_level > 9) { + compression_level = Z_DEFAULT_COMPRESSION; + } + z_stream stream; // FIXME(cavalcantii): z_const is not defined as 'const'. @@ -118,7 +126,7 @@ int CompressHelper(WrapperType wrapper_type, stream.opaque = static_cast<voidpf>(0); } - int err = deflateInit2(&stream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, + int err = deflateInit2(&stream, compression_level, Z_DEFLATED, ZlibStreamWrapperType(wrapper_type), kZlibMemoryLevel, Z_DEFAULT_STRATEGY); if (err != Z_OK) |