]> git.ipfire.org Git - pakfire.git/commitdiff
linter: Build out dummy function to scan the payload
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 21 Oct 2024 18:41:39 +0000 (18:41 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 21 Oct 2024 18:41:39 +0000 (18:41 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/archive.c
src/libpakfire/include/pakfire/archive.h
src/libpakfire/linter.c

index 070d8e954527613ea1f65aab5bfaf517b5d49d2f..b115a94436de8b5ee1f8dbbefeee7c648b8e44a2 100644 (file)
@@ -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
 */
index 80f9d97bcd86a15aada623da0598e8e2b3971766..f9465b62b85db5e0dc8844908ca4a76972955546 100644 (file)
@@ -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);
 
index ccf2b631e38e119968aab06526d0e8aa9cfb265e..c33646c0ce0ceb6b4f0d764e0612b9ca9a197123 100644 (file)
 #include <stdlib.h>
 #include <sys/queue.h>
 
+// libarchive
+#include <archive.h>
+#include <archive_entry.h>
+
 #include <pakfire/archive.h>
+#include <pakfire/file.h>
 #include <pakfire/linter.h>
 #include <pakfire/logging.h>
 #include <pakfire/package.h>
@@ -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;
 }