From: Michael Tremer Date: Mon, 21 Oct 2024 18:41:39 +0000 (+0000) Subject: linter: Build out dummy function to scan the payload X-Git-Tag: 0.9.30~967 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e35cfaca69f737af6d428b7ef0b2d69664d23c9b;p=pakfire.git linter: Build out dummy function to scan the payload Signed-off-by: Michael Tremer --- 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; }