From: Nguyen Thai Ngoc Duy Date: Wed, 25 Aug 2010 03:19:26 GMT Subject: Re: [PATCH 04/32] move do_compress() from pack-objects.c to pack-write.c Message-ID: In-Reply-To: <20100824232554.GF2376@burratino> On Wed, Aug 25, 2010 at 9:25 AM, Jonathan Nieder wrote: >> +unsigned long compress_object(void **pptr, unsigned long size) >> +{ >> +     z_stream stream; >> +     void *in, *out; >> +     unsigned long maxsize; >> + >> +     memset(&stream, 0, sizeof(stream)); >> +     deflateInit(&stream, Z_DEFAULT_COMPRESSION); >> +     maxsize = deflateBound(&stream, size); >> + >> +     in = *pptr; >> +     out = xmalloc(maxsize); >> +     *pptr = out; >> + >> +     stream.next_in = in; >> +     stream.avail_in = size; >> +     stream.next_out = out; >> +     stream.avail_out = maxsize; >> +     while (deflate(&stream, Z_FINISH) == Z_OK) >> +             ; /* nothing */ >> +     deflateEnd(&stream); >> + >> +     return stream.total_out; >> +} > > However, there is nothing particularly specialized to git objects > about this.  e.g. deflate_it() from diff.c could use this. Also archive-zip.c, fast-import.c, http-push.c and remote-curl.c have very similar code. I'll see if I can reduce some code duplication. -- Duy