compat/zlib: provide stubs for deflateSetHeader()

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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt
2025-01-28 09:41:32 +01:00
committed by Junio C Hamano
parent a2dcb69998
commit bb5d35c1a8
2 changed files with 19 additions and 4 deletions

View File

@@ -473,9 +473,7 @@ static const char internal_gzip_command[] = "git archive gzip";
static int write_tar_filter_archive(const struct archiver *ar, static int write_tar_filter_archive(const struct archiver *ar,
struct archiver_args *args) struct archiver_args *args)
{ {
#if ZLIB_VERNUM >= 0x1221
struct gz_header_s gzhead = { .os = 3 }; /* Unix, for reproducibility */ struct gz_header_s gzhead = { .os = 3 }; /* Unix, for reproducibility */
#endif
struct strbuf cmd = STRBUF_INIT; struct strbuf cmd = STRBUF_INIT;
struct child_process filter = CHILD_PROCESS_INIT; struct child_process filter = CHILD_PROCESS_INIT;
int r; int r;
@@ -486,10 +484,8 @@ static int write_tar_filter_archive(const struct archiver *ar,
if (!strcmp(ar->filter_command, internal_gzip_command)) { if (!strcmp(ar->filter_command, internal_gzip_command)) {
write_block = tgz_write_block; write_block = tgz_write_block;
git_deflate_init_gzip(&gzstream, args->compression_level); git_deflate_init_gzip(&gzstream, args->compression_level);
#if ZLIB_VERNUM >= 0x1221
if (deflateSetHeader(&gzstream.z, &gzhead) != Z_OK) if (deflateSetHeader(&gzstream.z, &gzhead) != Z_OK)
BUG("deflateSetHeader() called too late"); BUG("deflateSetHeader() called too late");
#endif
gzstream.next_out = outbuf; gzstream.next_out = outbuf;
gzstream.avail_out = sizeof(outbuf); gzstream.avail_out = sizeof(outbuf);

View File

@@ -7,4 +7,23 @@
# define deflateBound(c,s) ((s) + (((s) + 7) >> 3) + (((s) + 63) >> 6) + 11) # define deflateBound(c,s) ((s) + (((s) + 7) >> 3) + (((s) + 63) >> 6) + 11)
#endif #endif
/*
* zlib only gained support for setting up the gzip header in v1.2.2.1. In
* Git we only set the header to make archives reproducible across different
* operating systems, so it's fine to simply make this a no-op when using a
* zlib version that doesn't support this yet.
*/
#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 */ #endif /* COMPAT_ZLIB_H */