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:
committed by
Junio C Hamano
parent
a2dcb69998
commit
bb5d35c1a8
@@ -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);
|
||||
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user