From: Michael Tremer Date: Sat, 19 Oct 2024 13:58:04 +0000 (+0000) Subject: linter: Base this on archives rather than packages X-Git-Tag: 0.9.30~987 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7434632559e49d2da2c50f52995b7945024462f4;p=pakfire.git linter: Base this on archives rather than packages Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/include/pakfire/linter.h b/src/libpakfire/include/pakfire/linter.h index abe09f97c..cbc9b3d72 100644 --- a/src/libpakfire/include/pakfire/linter.h +++ b/src/libpakfire/include/pakfire/linter.h @@ -21,13 +21,13 @@ #ifndef PAKFIRE_LINTER_H #define PAKFIRE_LINTER_H +#include #include -#include struct pakfire_linter; int pakfire_linter_create(struct pakfire_linter** linter, - struct pakfire_ctx* ctx, struct pakfire_package* pkg); + struct pakfire_ctx* ctx, struct pakfire_archive* archive); struct pakfire_linter* pakfire_linter_ref(struct pakfire_linter* linter); struct pakfire_linter* pakfire_linter_unref(struct pakfire_linter* linter); diff --git a/src/libpakfire/linter.c b/src/libpakfire/linter.c index 0b2d37f40..204b18b8d 100644 --- a/src/libpakfire/linter.c +++ b/src/libpakfire/linter.c @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -29,11 +30,16 @@ struct pakfire_linter { struct pakfire_ctx* ctx; int nrefs; + // Archive + struct pakfire_archive* archive; + // Package struct pakfire_package* pkg; }; static void pakfire_linter_free(struct pakfire_linter* linter) { + if (linter->archive) + pakfire_archive_unref(linter->archive); if (linter->pkg) pakfire_package_unref(linter->pkg); if (linter->ctx) @@ -42,8 +48,9 @@ static void pakfire_linter_free(struct pakfire_linter* linter) { } int pakfire_linter_create(struct pakfire_linter** linter, - struct pakfire_ctx* ctx, struct pakfire_package* pkg) { + struct pakfire_ctx* ctx, struct pakfire_archive* archive) { struct pakfire_linter* l = NULL; + int r; // Allocate a new object l = calloc(1, sizeof(*l)); @@ -56,13 +63,25 @@ int pakfire_linter_create(struct pakfire_linter** linter, // Initialize reference counter l->nrefs = 1; - // Store the package - l->pkg = pakfire_package_ref(pkg); + // Store the archive + l->archive = pakfire_archive_ref(archive); + + // Fetch the package + r = pakfire_archive_make_package(l->archive, NULL, &l->pkg); + if (r < 0) { + CTX_ERROR(l->ctx, "Could not open the package in %s: %s\n", + pakfire_archive_get_path(l->archive), strerror(-r)); + goto ERROR; + } // Return the pointer - *linter = l; + *linter = pakfire_linter_ref(l); - return 0; +ERROR: + if (l) + pakfire_linter_unref(l); + + return r; } struct pakfire_linter* pakfire_linter_ref(struct pakfire_linter* linter) {