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>
Patrick Steinhardt committed
Jan 28, 2025 at 09:41 UTC
bb5d35c1a871cb1d8e4301e7b9b04e3266aec7f6
2 files changed
+19
-4
archive-tar.c
-4
@@ -473,9 +473,7 @@ static const char internal_gzip_command[] = "git archive gzip";
473
static int write_tar_filter_archive(const struct archiver *ar,
474
struct archiver_args *args)
475
{
476
-#if ZLIB_VERNUM >= 0x1221
476
struct gz_header_s gzhead = { .os = 3 }; /* Unix, for reproducibility */
478
-#endif
477
struct strbuf cmd = STRBUF_INIT;
478
struct child_process filter = CHILD_PROCESS_INIT;
479
int r;
@@ -486,10 +484,8 @@ static int write_tar_filter_archive(const struct archiver *ar,
484
if (!strcmp(ar->filter_command, internal_gzip_command)) {
485
write_block = tgz_write_block;
486
git_deflate_init_gzip(&gzstream, args->compression_level);
489
-#if ZLIB_VERNUM >= 0x1221
487
if (deflateSetHeader(&gzstream.z, &gzhead) != Z_OK)
488
BUG("deflateSetHeader() called too late");
492
-#endif
489
gzstream.next_out = outbuf;
490
gzstream.avail_out = sizeof(outbuf);
491
compat/zlib-compat.h
+19
@@ -7,4 +7,23 @@
7
# define deflateBound(c,s) ((s) + (((s) + 7) >> 3) + (((s) + 63) >> 6) + 11)
8
#endif
9
10
+/*
11
+ * zlib only gained support for setting up the gzip header in v1.2.2.1. In
12
+ * Git we only set the header to make archives reproducible across different
13
+ * operating systems, so it's fine to simply make this a no-op when using a
14
+ * zlib version that doesn't support this yet.
15
+ */
16
+#if ZLIB_VERNUM < 0x1221
17
+struct gz_header_s {
18
+ int os;
19
+};
20
+
21
+static int deflateSetHeader(z_streamp strm, struct gz_header_s *head)
22
+{
23
+ (void)(strm);
24
+ (void)(head);
25
+ return Z_OK;
26
+}
27
+#endif
28
+
29
#endif /* COMPAT_ZLIB_H */