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
*/
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);
#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>
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;
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;
}