Here is slightly more difficult, in particular a xrealloc() has been substituted with a free() + xmalloc() to keep the code simple. Signed-off-by: Marco Costalba <mcostalba@xxxxxxxxx> --- fast-import.c | 45 +++++++++++++++------------------------------ 1 files changed, 15 insertions(+), 30 deletions(-) diff --git a/fast-import.c b/fast-import.c index a523b17..b6bb84c 100644 --- a/fast-import.c +++ b/fast-import.c @@ -141,6 +141,7 @@ Format of STDIN stream: #include "builtin.h" #include "cache.h" +#include "compress.h" #include "object.h" #include "blob.h" #include "tree.h" @@ -997,13 +998,13 @@ static int store_object( unsigned char *sha1out, uintmax_t mark) { - void *out, *delta; + unsigned char *out, *delta; struct object_entry *e; unsigned char hdr[96]; unsigned char sha1[20]; unsigned long hdrlen, deltalen; SHA_CTX c; - z_stream s; + int out_size; hdrlen = sprintf((char*)hdr,"%s %lu", typename(type), (unsigned long)dat->len) + 1; @@ -1039,24 +1040,15 @@ static int store_object( } else delta = NULL; - memset(&s, 0, sizeof(s)); - deflateInit(&s, pack_compression_level); - if (delta) { - s.next_in = delta; - s.avail_in = deltalen; - } else { - s.next_in = (void *)dat->buf; - s.avail_in = dat->len; - } - s.avail_out = deflateBound(&s, s.avail_in); - s.next_out = out = xmalloc(s.avail_out); - while (deflate(&s, Z_FINISH) == Z_OK) - /* nothing */; - deflateEnd(&s); + if (delta) + out_size = compress_all(pack_compression_level, delta, deltalen, &out); + else + out_size = compress_all(pack_compression_level, + (unsigned char *)dat->buf, dat->len, &out); /* Determine if we should auto-checkpoint. */ - if ((pack_size + 60 + s.total_out) > max_packsize - || (pack_size + 60 + s.total_out) < pack_size) { + if ((pack_size + 60 + out_size) > max_packsize + || (pack_size + 60 + out_size) < pack_size) { /* This new object needs to *not* have the current pack_id. */ e->pack_id = pack_id + 1; @@ -1066,16 +1058,9 @@ static int store_object( if (delta) { free(delta); delta = NULL; - - memset(&s, 0, sizeof(s)); - deflateInit(&s, pack_compression_level); - s.next_in = (void *)dat->buf; - s.avail_in = dat->len; - s.avail_out = deflateBound(&s, s.avail_in); - s.next_out = out = xrealloc(out, s.avail_out); - while (deflate(&s, Z_FINISH) == Z_OK) - /* nothing */; - deflateEnd(&s); + free(out); + out_size = compress_all(pack_compression_level, + (unsigned char *)dat->buf, dat->len, &out); } } @@ -1108,8 +1093,8 @@ static int store_object( pack_size += hdrlen; } - write_or_die(pack_data->pack_fd, out, s.total_out); - pack_size += s.total_out; + write_or_die(pack_data->pack_fd, out, out_size); + pack_size += out_size; free(out); free(delta); -- 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