summaryrefslogtreecommitdiff
path: root/bin/tar2sqfs/process_tarball.c
diff options
context:
space:
mode:
authorDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2024-01-24 10:11:16 +0100
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2024-01-29 16:07:39 +0100
commitf47425873fad94d3e7add4c7d5c48c2f7c67dbe5 (patch)
tree6c6990e09aa1110f843b2ee2e4e3bb101a86432b /bin/tar2sqfs/process_tarball.c
parent45e0d72a6778af21174771faa08032cf76eca090 (diff)
tar2sqfs: Backport exclude filtering logic
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'bin/tar2sqfs/process_tarball.c')
-rw-r--r--bin/tar2sqfs/process_tarball.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/bin/tar2sqfs/process_tarball.c b/bin/tar2sqfs/process_tarball.c
index c0ae5a3..51bef41 100644
--- a/bin/tar2sqfs/process_tarball.c
+++ b/bin/tar2sqfs/process_tarball.c
@@ -6,6 +6,16 @@
*/
#include "tar2sqfs.h"
+static bool is_excluded(const char *name)
+{
+ for (size_t i = 0; i < num_excludedirs; ++i) {
+ if (fnmatch(excludedirs[i], name, 0) == 0)
+ return true;
+ }
+
+ return false;
+}
+
static int write_file(istream_t *input_file, sqfs_writer_t *sqfs,
const tar_header_decoded_t *hdr,
file_info_t *fi, sqfs_u64 filesize)
@@ -237,6 +247,11 @@ int process_tarball(istream_t *input_file, sqfs_writer_t *sqfs)
fprintf(stderr, "skipping '%s' (invalid name)\n",
hdr.name);
skip = true;
+ } else if (is_excluded(hdr.name)) {
+ if (skip_entry(input_file, hdr.record_size))
+ goto fail;
+ clear_header(&hdr);
+ continue;
} else if (root_becomes != NULL) {
if (strncmp(hdr.name, root_becomes, rootlen) == 0) {
if (hdr.name[rootlen] == '\0') {