A multistep compress is required here, so we need the full arsenal of compress helpers. Signed-off-by: Marco Costalba <mcostalba@xxxxxxxxx> --- sha1_file.c | 41 ++++++++++++----------------------------- 1 files changed, 12 insertions(+), 29 deletions(-) diff --git a/sha1_file.c b/sha1_file.c index 66a4e00..f48ad04 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -7,6 +7,7 @@ * creation etc. */ #include "cache.h" +#include "compress.h" #include "delta.h" #include "pack.h" #include "blob.h" @@ -2102,33 +2103,23 @@ int write_sha1_file(void *buf, unsigned long len, const char *type, unsigned cha } /* Set it up */ - memset(&stream, 0, sizeof(stream)); - deflateInit(&stream, zlib_compression_level); - size = 8 + deflateBound(&stream, len+hdrlen); + size = 8 + compress_alloc(&stream, zlib_compression_level, len+hdrlen); compressed = xmalloc(size); /* Compress it */ - stream.next_out = compressed; - stream.avail_out = size; + compress_start(&stream, (unsigned char *)hdr, hdrlen, compressed, size); /* First header.. */ - stream.next_in = (unsigned char *)hdr; - stream.avail_in = hdrlen; - while (deflate(&stream, 0) == Z_OK) - /* nothing */; + compress_next(&stream, Z_NO_FLUSH); /* Then the data itself.. */ stream.next_in = buf; stream.avail_in = len; - ret = deflate(&stream, Z_FINISH); + ret = compress_next(&stream, Z_FINISH); if (ret != Z_STREAM_END) die("unable to deflate new object %s (%d)", sha1_to_hex(sha1), ret); - ret = deflateEnd(&stream); - if (ret != Z_OK) - die("deflateEnd on object %s failed (%d)", sha1_to_hex(sha1), ret); - - size = stream.total_out; + size = compress_free(&stream); if (write_buffer(fd, compressed, size) < 0) die("unable to write sha1 file"); @@ -2163,30 +2154,22 @@ static void *repack_object(const unsigned char *sha1, unsigned long *objsize) hdrlen = sprintf(hdr, "%s %lu", typename(type), len) + 1; /* Set it up */ - memset(&stream, 0, sizeof(stream)); - deflateInit(&stream, zlib_compression_level); - size = deflateBound(&stream, len + hdrlen); + size = compress_alloc(&stream, zlib_compression_level, len + hdrlen); buf = xmalloc(size); /* Compress it */ - stream.next_out = buf; - stream.avail_out = size; + compress_start(&stream, (unsigned char *)hdr, hdrlen, buf, size); /* First header.. */ - stream.next_in = (void *)hdr; - stream.avail_in = hdrlen; - while (deflate(&stream, 0) == Z_OK) - /* nothing */; + compress_next(&stream, Z_NO_FLUSH); /* Then the data itself.. */ stream.next_in = unpacked; stream.avail_in = len; - while (deflate(&stream, Z_FINISH) == Z_OK) - /* nothing */; - deflateEnd(&stream); - free(unpacked); + compress_next(&stream, Z_FINISH); - *objsize = stream.total_out; + *objsize = compress_free(&stream); + free(unpacked); return buf; } -- 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