From e35cfaca69f737af6d428b7ef0b2d69664d23c9b Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 21 Oct 2024 18:41:39 +0000 Subject: [PATCH] linter: Build out dummy function to scan the payload Signed-off-by: Michael Tremer --- src/libpakfire/archive.c | 6 +++++ src/libpakfire/include/pakfire/archive.h | 3 +++ src/libpakfire/linter.c | 30 ++++++++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index 070d8e954..b115a9443 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -773,6 +773,12 @@ static int pakfire_archive_filter_payload(struct pakfire_archive* archive, return PAKFIRE_WALK_DONE; } +int pakfire_archive_walk_payload(struct pakfire_archive* archive, + pakfire_archive_walk_callback callback, void* data) { + return pakfire_archive_open_and_walk( + archive, callback, pakfire_archive_filter_payload, data); +} + /* Read files from the archive */ diff --git a/src/libpakfire/include/pakfire/archive.h b/src/libpakfire/include/pakfire/archive.h index 80f9d97bc..f9465b62b 100644 --- a/src/libpakfire/include/pakfire/archive.h +++ b/src/libpakfire/include/pakfire/archive.h @@ -89,6 +89,9 @@ enum pakfire_archive_walk_codes { PAKFIRE_WALK_AGAIN = -40, }; +int pakfire_archive_walk_payload(struct pakfire_archive* archive, + pakfire_archive_walk_callback callback, void* data); + int pakfire_archive_copy(struct pakfire_archive* archive, const char* path); int pakfire_archive_link_or_copy(struct pakfire_archive* archive, const char* path); diff --git a/src/libpakfire/linter.c b/src/libpakfire/linter.c index ccf2b631e..c33646c0c 100644 --- a/src/libpakfire/linter.c +++ b/src/libpakfire/linter.c @@ -22,7 +22,12 @@ #include #include +// libarchive +#include +#include + #include +#include #include #include #include @@ -232,6 +237,26 @@ static int pakfire_linter_name(struct pakfire_linter* linter) { return 0; } +static int pakfire_linter_payload(struct pakfire_archive* archive, + struct archive* a, struct archive_entry* e, void* data) { + struct pakfire_linter* linter = data; + struct pakfire_file* file = NULL; + int r; + + // Fetch a file object + r = pakfire_file_create_from_archive_entry(&file, linter->pakfire, e); + if (r < 0) + goto ERROR; + + CTX_DEBUG(linter->ctx, "Linting %s...\n", pakfire_file_get_path(file)); + +ERROR: + if (file) + pakfire_file_unref(file); + + return r; +} + int pakfire_linter_lint(struct pakfire_linter* linter) { int r; @@ -240,5 +265,10 @@ int pakfire_linter_lint(struct pakfire_linter* linter) { if (r < 0) return r; + // Lint the payload + r = pakfire_archive_walk_payload(linter->archive, pakfire_linter_payload, linter); + if (r < 0) + return r; + return 0; } -- 2.39.5