Only in two places is possible to really simplify deflate code with the all_in_one decompress_all() Signed-off-by: Marco Costalba <mcostalba@xxxxxxxxx> --- builtin-apply.c | 23 +++++++++-------------- index-pack.c | 30 +++++++----------------------- 2 files changed, 16 insertions(+), 37 deletions(-) diff --git a/builtin-apply.c b/builtin-apply.c index 30d86f2..fa589e6 100644 --- a/builtin-apply.c +++ b/builtin-apply.c @@ -8,6 +8,7 @@ */ #include "cache.h" #include "cache-tree.h" +#include "compress.h" #include "quote.h" #include "blob.h" #include "delta.h" @@ -1105,23 +1106,17 @@ static inline int metadata_changes(struct patch *patch) static char *inflate_it(const void *data, unsigned long size, unsigned long inflated_size) { - z_stream stream; - void *out; - int st; + unsigned char *out; + unsigned long out_size; - memset(&stream, 0, sizeof(stream)); + out = xmalloc(inflated_size); + out_size = decompress_all((unsigned char *)data, size, out, inflated_size); - stream.next_in = (unsigned char *)data; - stream.avail_in = size; - stream.next_out = out = xmalloc(inflated_size); - stream.avail_out = inflated_size; - inflateInit(&stream); - st = inflate(&stream, Z_FINISH); - if ((st != Z_STREAM_END) || stream.total_out != inflated_size) { + if (out_size != inflated_size) { free(out); return NULL; } - return out; + return (char *)out; } static struct fragment *parse_binary_hunk(char **buf_p, diff --git a/index-pack.c b/index-pack.c index 880088e..30d7837 100644 --- a/index-pack.c +++ b/index-pack.c @@ -169,24 +169,18 @@ static void *unpack_entry_data(unsigned long offset, unsigned long size) z_stream stream; void *buf = xmalloc(size); - memset(&stream, 0, sizeof(stream)); - stream.next_out = buf; - stream.avail_out = size; - stream.next_in = fill(1); - stream.avail_in = input_len; - inflateInit(&stream); + decompress_alloc(&stream); + decompress_into(&stream, buf, size); for (;;) { - int ret = inflate(&stream, 0); + int ret = decompress_next_from(&stream, fill(1), input_len, Z_NO_FLUSH); use(input_len - stream.avail_in); if (stream.total_out == size && ret == Z_STREAM_END) break; if (ret != Z_OK) - bad_object(offset, "inflate returned %d", ret); - stream.next_in = fill(1); - stream.avail_in = input_len; + bad_object(offset, "decompress returned %d", ret); } - inflateEnd(&stream); + decompress_free(&stream); return buf; } @@ -261,8 +255,6 @@ static void *get_data_from_pack(struct object_entry *obj) unsigned long len = obj[1].idx.offset - from; unsigned long rdy = 0; unsigned char *src, *data; - z_stream stream; - int st; src = xmalloc(len); data = src; @@ -273,16 +265,8 @@ static void *get_data_from_pack(struct object_entry *obj) rdy += n; } while (rdy < len); data = xmalloc(obj->size); - memset(&stream, 0, sizeof(stream)); - stream.next_out = data; - stream.avail_out = obj->size; - stream.next_in = src; - stream.avail_in = len; - inflateInit(&stream); - while ((st = inflate(&stream, Z_FINISH)) == Z_OK); - inflateEnd(&stream); - if (st != Z_STREAM_END || stream.total_out != obj->size) - die("serious inflate inconsistency"); + if (decompress_all(src, len, data, obj->size) != obj->size) + die("serious decompress inconsistency"); free(src); return data; } -- 1.5.4.rc4.39.g524a - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html