[PATCH 06/11] Better error handling in compress_all()
From: Marco Costalba <hidden>
Date: 2016-06-15 22:44:09
Subsystem:
the rest · Maintainer:
Linus Torvalds
Also let the caller to xmalloc() the buffer int compress_start() Signed-off-by: Marco Costalba <redacted> --- compress.c | 19 +++++++++---------- 1 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/compress.c b/compress.c
index f6986c3..0d0b9d9 100644
--- a/compress.c
+++ b/compress.c@@ -12,7 +12,7 @@ int compress_start(z_stream *stream, unsigned char *in, unsigned long in_size, unsigned char *out, unsigned long out_size) { - stream->next_out = (out ? out : xmalloc(out_size)); + stream->next_out = out; stream->avail_out = out_size; stream->next_in = in; stream->avail_in = in_size;
@@ -36,19 +36,18 @@ unsigned long compress_free(z_stream *stream) return stream->total_out; } -unsigned long compress_all(int level, unsigned char *data, - unsigned long size, unsigned char **out) +unsigned long compress_all(int level, unsigned char *in, + unsigned long in_size, unsigned char **out) { - int bound, result; + unsigned long out_size; z_stream stream; - bound = compress_alloc(&stream, level, size); - compress_start(&stream, data, size, NULL, bound); + out_size = compress_alloc(&stream, level, in_size); + *out = xmalloc(out_size); - *out = stream.next_out; - result = compress_next(&stream, Z_FINISH); - - if (result != Z_STREAM_END) { + if ( compress_start(&stream, in, in_size, *out, out_size) != Z_OK + || compress_next(&stream, Z_FINISH) != Z_STREAM_END) + { compress_free(&stream); free(*out); *out = NULL;
--
1.5.4.rc4.39.g524a