From 0af974f37314fefc68d2b8a9bdf35235befdb610 Mon Sep 17 00:00:00 2001 From: Baruch Siach Date: Tue, 9 Jul 2019 13:33:47 +0300 Subject: [PATCH] package/libarchive: fix build without zlib Add upstream patch fixing build without zlib. Fixes: http://autobuild.buildroot.net/results/d116d3ace93784722a0914f73dc402746d04b439/ Signed-off-by: Baruch Siach Signed-off-by: Arnout Vandecappelle (Essensium/Mind) --- ...001-Unbreak-compilation-without-zlib.patch | 167 ++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 package/libarchive/0001-Unbreak-compilation-without-zlib.patch diff --git a/package/libarchive/0001-Unbreak-compilation-without-zlib.patch b/package/libarchive/0001-Unbreak-compilation-without-zlib.patch new file mode 100644 index 0000000000..b4da5206d4 --- /dev/null +++ b/package/libarchive/0001-Unbreak-compilation-without-zlib.patch @@ -0,0 +1,167 @@ +From 64333cef68d7bcc67bef6ecf177fbeaa549b9139 Mon Sep 17 00:00:00 2001 +From: Martin Matuska +Date: Sat, 29 Jun 2019 00:20:58 +0200 +Subject: [PATCH] Unbreak compilation without zlib + +Fixes #1214 + +Signed-off-by: Baruch Siach +--- +Upstream status: commit 64333cef68d7 + + libarchive/archive_read_support_filter_gzip.c | 54 ++++++++++++------- + libarchive/test/test_read_format_raw.c | 4 ++ + 2 files changed, 39 insertions(+), 19 deletions(-) + +diff --git a/libarchive/archive_read_support_filter_gzip.c b/libarchive/archive_read_support_filter_gzip.c +index 458b6f729164..9fa9e2b0ddb8 100644 +--- a/libarchive/archive_read_support_filter_gzip.c ++++ b/libarchive/archive_read_support_filter_gzip.c +@@ -131,12 +131,20 @@ archive_read_support_filter_gzip(struct archive *_a) + */ + static ssize_t + peek_at_header(struct archive_read_filter *filter, int *pbits, +- struct private_data *state) ++#ifdef HAVE_ZLIB_H ++ struct private_data *state ++#else ++ void *state ++#endif ++ ) + { + const unsigned char *p; + ssize_t avail, len; + int bits = 0; + int header_flags; ++#ifndef HAVE_ZLIB_H ++ (void)state; /* UNUSED */ ++#endif + + /* Start by looking at the first ten bytes of the header, which + * is all fixed layout. */ +@@ -153,8 +161,10 @@ peek_at_header(struct archive_read_filter *filter, int *pbits, + bits += 3; + header_flags = p[3]; + /* Bytes 4-7 are mod time in little endian. */ ++#ifdef HAVE_ZLIB_H + if (state) + state->mtime = archive_le32dec(p + 4); ++#endif + /* Byte 8 is deflate flags. */ + /* XXXX TODO: return deflate flags back to consume_header for use + in initializing the decompressor. */ +@@ -171,7 +181,9 @@ peek_at_header(struct archive_read_filter *filter, int *pbits, + + /* Null-terminated optional filename. */ + if (header_flags & 8) { ++#ifdef HAVE_ZLIB_H + ssize_t file_start = len; ++#endif + do { + ++len; + if (avail < len) +@@ -181,11 +193,13 @@ peek_at_header(struct archive_read_filter *filter, int *pbits, + return (0); + } while (p[len - 1] != 0); + ++#ifdef HAVE_ZLIB_H + if (state) { + /* Reset the name in case of repeat header reads. */ + free(state->name); + state->name = strdup((const char *)&p[file_start]); + } ++#endif + } + + /* Null-terminated optional comment. */ +@@ -236,24 +250,6 @@ gzip_bidder_bid(struct archive_read_filter_bidder *self, + return (0); + } + +-static int +-gzip_read_header(struct archive_read_filter *self, struct archive_entry *entry) +-{ +- struct private_data *state; +- +- state = (struct private_data *)self->data; +- +- /* A mtime of 0 is considered invalid/missing. */ +- if (state->mtime != 0) +- archive_entry_set_mtime(entry, state->mtime, 0); +- +- /* If the name is available, extract it. */ +- if (state->name) +- archive_entry_set_pathname(entry, state->name); +- +- return (ARCHIVE_OK); +-} +- + #ifndef HAVE_ZLIB_H + + /* +@@ -277,6 +273,24 @@ gzip_bidder_init(struct archive_read_filter *self) + + #else + ++static int ++gzip_read_header(struct archive_read_filter *self, struct archive_entry *entry) ++{ ++ struct private_data *state; ++ ++ state = (struct private_data *)self->data; ++ ++ /* A mtime of 0 is considered invalid/missing. */ ++ if (state->mtime != 0) ++ archive_entry_set_mtime(entry, state->mtime, 0); ++ ++ /* If the name is available, extract it. */ ++ if (state->name) ++ archive_entry_set_pathname(entry, state->name); ++ ++ return (ARCHIVE_OK); ++} ++ + /* + * Initialize the filter object. + */ +@@ -306,7 +320,9 @@ gzip_bidder_init(struct archive_read_filter *self) + self->read = gzip_filter_read; + self->skip = NULL; /* not supported */ + self->close = gzip_filter_close; ++#ifdef HAVE_ZLIB_H + self->read_header = gzip_read_header; ++#endif + + state->in_stream = 0; /* We're not actually within a stream yet. */ + +diff --git a/libarchive/test/test_read_format_raw.c b/libarchive/test/test_read_format_raw.c +index 0dac8bfbab4a..3961723b48a1 100644 +--- a/libarchive/test/test_read_format_raw.c ++++ b/libarchive/test/test_read_format_raw.c +@@ -36,7 +36,9 @@ DEFINE_TEST(test_read_format_raw) + const char *reffile1 = "test_read_format_raw.data"; + const char *reffile2 = "test_read_format_raw.data.Z"; + const char *reffile3 = "test_read_format_raw.bufr"; ++#ifdef HAVE_ZLIB_H + const char *reffile4 = "test_read_format_raw.data.gz"; ++#endif + + /* First, try pulling data out of an uninterpretable file. */ + extract_reference_file(reffile1); +@@ -119,6 +121,7 @@ DEFINE_TEST(test_read_format_raw) + assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); + assertEqualInt(ARCHIVE_OK, archive_read_free(a)); + ++#ifdef HAVE_ZLIB_H + /* Fourth, try with gzip which has metadata. */ + extract_reference_file(reffile4); + assert((a = archive_read_new()) != NULL); +@@ -144,4 +147,5 @@ DEFINE_TEST(test_read_format_raw) + assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); + assertEqualInt(ARCHIVE_OK, archive_read_free(a)); ++#endif + } +-- +2.20.1 + -- 2.30.2