=========================================================================== Compresses the source buffer into the destination buffer. The level parameter has the same meaning as in deflateInit. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be at least 0.1% larger than sourceLen plus 12 bytes. Upon ex
| 20 | Z_STREAM_ERROR if the level parameter is invalid. |
| 21 | */ |
| 22 | int ZEXPORT compress2(Bytef *dest, uLongf *destLen, const Bytef *source, |
| 23 | uLong sourceLen, int level) { |
| 24 | z_stream stream; |
| 25 | int err; |
| 26 | const uInt max = (uInt)-1; |
| 27 | uLong left; |
| 28 | |
| 29 | left = *destLen; |
| 30 | *destLen = 0; |
| 31 | |
| 32 | stream.zalloc = (alloc_func)0; |
| 33 | stream.zfree = (free_func)0; |
| 34 | stream.opaque = (voidpf)0; |
| 35 | |
| 36 | err = deflateInit(&stream, level); |
| 37 | if (err != Z_OK) return err; |
| 38 | |
| 39 | stream.next_out = dest; |
| 40 | stream.avail_out = 0; |
| 41 | stream.next_in = (z_const Bytef *)source; |
| 42 | stream.avail_in = 0; |
| 43 | |
| 44 | do { |
| 45 | if (stream.avail_out == 0) { |
| 46 | stream.avail_out = left > (uLong)max ? max : (uInt)left; |
| 47 | left -= stream.avail_out; |
| 48 | } |
| 49 | if (stream.avail_in == 0) { |
| 50 | stream.avail_in = sourceLen > (uLong)max ? max : (uInt)sourceLen; |
| 51 | sourceLen -= stream.avail_in; |
| 52 | } |
| 53 | err = deflate(&stream, sourceLen ? Z_NO_FLUSH : Z_FINISH); |
| 54 | } while (err == Z_OK); |
| 55 | |
| 56 | *destLen = stream.total_out; |
| 57 | deflateEnd(&stream); |
| 58 | return err == Z_STREAM_END ? Z_OK : err; |
| 59 | } |
| 60 | |
| 61 | /* =========================================================================== |
| 62 | */ |
no test coverage detected