#ifndef PAKFIRE_LINTER_H
#define PAKFIRE_LINTER_H
+#include <pakfire/archive.h>
#include <pakfire/ctx.h>
-#include <pakfire/package.h>
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);
#include <errno.h>
#include <stdlib.h>
+#include <pakfire/archive.h>
#include <pakfire/linter.h>
#include <pakfire/logging.h>
#include <pakfire/package.h>
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)
}
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));
// 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) {