]> git.ipfire.org Git - thirdparty/git.git/commitdiff
compat/zlib: provide stubs for `deflateSetHeader()`
authorPatrick Steinhardt <ps@pks.im>
Tue, 28 Jan 2025 08:41:32 +0000 (09:41 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 28 Jan 2025 21:03:23 +0000 (13:03 -0800)
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>
archive-tar.c
compat/zlib-compat.h

index e7b3489e1e6c826d8128cddb0c5be04042a65cec..0edf13fba7568b3950978a05a2f50299bb9b2f18 100644 (file)
@@ -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);
 
index 96a08811a98ff7fa057f5682a5303a06cef40cd1..6226b30c0c4098c9d1beca23f4f54942c18035f5 100644 (file)
@@ -7,4 +7,23 @@
 # define deflateBound(c,s)  ((s) + (((s) + 7) >> 3) + (((s) + 63) >> 6) + 11)
 #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 */