Message ID | 20250116-b4-pks-compat-drop-uncompress2-v3-6-f2af1f5c4a06@pks.im (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | compat/zlib: allow use of zlib-ng as backend | expand |
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@pks.im> > --- > 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
On Sun, Jan 26, 2025 at 06:56:40PM -0600, Justin Tobler wrote: > On 25/01/16 10:17AM, Patrick Steinhardt wrote: > > 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. It's non-obvious why skipping the logic would be fine, so explicitly documenting makes sense indeed. Patrick
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 */
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@pks.im> --- archive-tar.c | 4 ---- compat/zlib-compat.h | 13 +++++++++++++ 2 files changed, 13 insertions(+), 4 deletions(-)