On 25/01/16 10:17AM, Patrick Steinhardt wrote: > The function `deflateSetHeader()` has been introduced with zlib v1.2.2.1, > so we don't use it when linking against an older version of it. Refactor > the code to instead provide a central stub via "compat/zlib.h" so that > we can adapt it based on whether or not we use zlib-ng in a subsequent > commit. > > Signed-off-by: Patrick Steinhardt <ps@xxxxxx> > --- > archive-tar.c | 4 ---- > compat/zlib-compat.h | 13 +++++++++++++ > 2 files changed, 13 insertions(+), 4 deletions(-) > > diff --git a/archive-tar.c b/archive-tar.c > index e7b3489e1e..0edf13fba7 100644 > --- a/archive-tar.c > +++ b/archive-tar.c > @@ -473,9 +473,7 @@ static const char internal_gzip_command[] = "git archive gzip"; > static int write_tar_filter_archive(const struct archiver *ar, > struct archiver_args *args) > { > -#if ZLIB_VERNUM >= 0x1221 > struct gz_header_s gzhead = { .os = 3 }; /* Unix, for reproducibility */ > -#endif > struct strbuf cmd = STRBUF_INIT; > struct child_process filter = CHILD_PROCESS_INIT; > int r; > @@ -486,10 +484,8 @@ static int write_tar_filter_archive(const struct archiver *ar, > if (!strcmp(ar->filter_command, internal_gzip_command)) { > write_block = tgz_write_block; > git_deflate_init_gzip(&gzstream, args->compression_level); > -#if ZLIB_VERNUM >= 0x1221 > if (deflateSetHeader(&gzstream.z, &gzhead) != Z_OK) > BUG("deflateSetHeader() called too late"); > -#endif > gzstream.next_out = outbuf; > gzstream.avail_out = sizeof(outbuf); > > diff --git a/compat/zlib-compat.h b/compat/zlib-compat.h > index 96a08811a9..2690bfce41 100644 > --- a/compat/zlib-compat.h > +++ b/compat/zlib-compat.h > @@ -7,4 +7,17 @@ > # define deflateBound(c,s) ((s) + (((s) + 7) >> 3) + (((s) + 63) >> 6) + 11) > #endif > > +#if ZLIB_VERNUM < 0x1221 > +struct gz_header_s { > + int os; > +}; > + > +static int deflateSetHeader(z_streamp strm, struct gz_header_s *head) > +{ > + (void)(strm); > + (void)(head); > + return Z_OK; > +} > +#endif > + > #endif /* COMPAT_ZLIB_H */ In zlib versions under 1.2.2.1, `gz_header_s` and `deflateSetHeader()` are not defined. It looks like we are defining them here, but so they behave as a no-op where used. If I'm understanding this correctly, it might be nice to have a comment explaining the no-op component. -Justin