if (!repo)
return NULL;
+ struct pakfire_package* package = NULL;
+
// Make the package
- struct pakfire_package* pkg = pakfire_archive_make_package(self->archive, repo);
+ int r = pakfire_archive_make_package(self->archive, repo, &package);
+ if (r) {
+ PyErr_SetFromErrno(PyExc_OSError);
+ return NULL;
+ }
// Make the Python object
- PyObject* ret = new_package(&PackageType, pkg);
+ PyObject* ret = new_package(&PackageType, package);
// Cleanup
- pakfire_package_unref(pkg);
+ pakfire_package_unref(package);
pakfire_repo_unref(repo);
pakfire_unref(pakfire);
if (!repo)
return NULL;
- archive->package = pakfire_archive_make_package(archive, repo);
+ int r = pakfire_archive_make_package(archive, repo, &archive->package);
pakfire_repo_unref(repo);
- if (!archive->package)
+ if (!r)
return NULL;
}
/*
Copy all metadata from this archive to the package object
*/
-PAKFIRE_EXPORT struct pakfire_package* pakfire_archive_make_package(struct pakfire_archive* archive, struct pakfire_repo* repo) {
+PAKFIRE_EXPORT int pakfire_archive_make_package(struct pakfire_archive* archive,
+ struct pakfire_repo* repo, struct pakfire_package** package) {
char* name = pakfire_archive_get(archive, "package", "name");
char* arch = pakfire_archive_get(archive, "package", "arch");
pakfire_filelist_unref(filelist);
}
- return pkg;
+ *package = pkg;
+
+ return 0;
}
static int pakfire_archive_load_scriptlet(struct pakfire_archive* archive,
int pakfire_archive_sign(struct pakfire_archive* archive, struct pakfire_key* key);
size_t pakfire_archive_get_size(struct pakfire_archive* archive);
-struct pakfire_package* pakfire_archive_make_package(
- struct pakfire_archive* archive, struct pakfire_repo* repo);
+int pakfire_archive_make_package(struct pakfire_archive* archive,
+ struct pakfire_repo* repo, struct pakfire_package** package);
#ifdef PAKFIRE_PRIVATE
int pakfire_repo_add_archive(struct pakfire_repo* repo,
struct pakfire_archive* archive, struct pakfire_package** package) {
- struct pakfire_package* p = pakfire_archive_make_package(archive, repo);
-
- if (package)
- *package = p;
-
- if (p)
- return 0;
-
- return 1;
+ return pakfire_archive_make_package(archive, repo, package);
}
struct pakfire_mirrorlist* pakfire_repo_get_mirrorlist(struct pakfire_repo* repo) {
static int pakfire_repo_scan_file(struct pakfire_repo* repo, const char* path) {
DEBUG(repo->pakfire, "Scanning %s...\n", path);
- struct pakfire_archive* archive;
+ struct pakfire_archive* archive = NULL;
+ struct pakfire_package* package = NULL;
+
+ // Open archive
int r = pakfire_archive_open(&archive, repo->pakfire, path);
if (r)
return r;
// Import package into the repository
- struct pakfire_package* pkg = pakfire_archive_make_package(archive, repo);
- if (!pkg) {
+ r = pakfire_archive_make_package(archive, repo, &package);
+ if (r) {
pakfire_archive_unref(archive);
- return errno;
+ return r;
}
- pakfire_package_unref(pkg);
+ pakfire_package_unref(package);
pakfire_archive_unref(archive);
return 0;