From: Michael Tremer Date: Fri, 20 Aug 2021 09:24:50 +0000 (+0000) Subject: repo: Have pakfire_repo_add_archive return int X-Git-Tag: 0.9.28~986 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=20b13a1b933f930897ecd299ab710cd08e70078c;p=pakfire.git repo: Have pakfire_repo_add_archive return int Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/include/pakfire/package.h b/src/libpakfire/include/pakfire/package.h index 4133e4e3d..61b802ebc 100644 --- a/src/libpakfire/include/pakfire/package.h +++ b/src/libpakfire/include/pakfire/package.h @@ -23,13 +23,13 @@ #include +struct pakfire_package; + #include #include #include #include -struct pakfire_package; - struct pakfire_package* pakfire_package_create(struct pakfire* pakfire, struct pakfire_repo* repo, const char* name, const char* evr, const char* arch); diff --git a/src/libpakfire/include/pakfire/repo.h b/src/libpakfire/include/pakfire/repo.h index 60b4babf2..252276d61 100644 --- a/src/libpakfire/include/pakfire/repo.h +++ b/src/libpakfire/include/pakfire/repo.h @@ -71,7 +71,8 @@ int pakfire_repo_is_installed_repo(struct pakfire_repo* repo); int pakfire_repo_read_solv(struct pakfire_repo* repo, FILE *f, int flags); int pakfire_repo_write_solv(struct pakfire_repo* repo, FILE *f, int flags); -struct pakfire_package* pakfire_repo_add_archive(struct pakfire_repo* repo, struct pakfire_archive* archive); +int pakfire_repo_add_archive(struct pakfire_repo* repo, + struct pakfire_archive* archive, struct pakfire_package** package); // Cache diff --git a/src/libpakfire/repo.c b/src/libpakfire/repo.c index f594fa08b..233f02741 100644 --- a/src/libpakfire/repo.c +++ b/src/libpakfire/repo.c @@ -831,11 +831,32 @@ PAKFIRE_EXPORT int pakfire_repo_read_solv(struct pakfire_repo* repo, FILE *f, in PAKFIRE_EXPORT int pakfire_repo_write_solv(struct pakfire_repo* repo, FILE *f, int flags) { pakfire_repo_internalize(repo); - return repo_write(repo->repo, f); + // Export repository data + int r = repo_write(repo->repo, f); + if (r) + return r; + + // Flush buffers + r = fflush(f); + if (r) { + ERROR(repo->pakfire, "Could not flush after writing repository: %m\n"); + return r; + } + + return r; } -PAKFIRE_EXPORT struct pakfire_package* pakfire_repo_add_archive(struct pakfire_repo* repo, struct pakfire_archive* archive) { - return pakfire_archive_make_package(archive, repo); +PAKFIRE_EXPORT 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; } PAKFIRE_EXPORT int pakfire_repo_clean(struct pakfire_repo* repo, int flags) { diff --git a/src/libpakfire/request.c b/src/libpakfire/request.c index b50a802ae..28a4a1b5f 100644 --- a/src/libpakfire/request.c +++ b/src/libpakfire/request.c @@ -390,6 +390,7 @@ static int pakfire_request_add_job(struct pakfire_request* request, int action, static int pakfire_request_add_archive(struct pakfire_request* request, int action, struct pakfire_archive* archive, int extra_flags) { struct pakfire_repo* repo = NULL; + struct pakfire_package* package = NULL; int r; r = pakfire_repo_create(&repo, request->pakfire, "@commandline"); @@ -397,11 +398,11 @@ static int pakfire_request_add_archive(struct pakfire_request* request, int acti return r; // Add it to the repository - struct pakfire_package* pkg = pakfire_repo_add_archive(repo, archive); - if (!pkg) + r = pakfire_repo_add_archive(repo, archive, &package); + if (r) goto ERROR; - r = pakfire_request_add_package(request, action, pkg, extra_flags); + r = pakfire_request_add_package(request, action, package, extra_flags); if (r) goto ERROR; @@ -409,8 +410,8 @@ static int pakfire_request_add_archive(struct pakfire_request* request, int acti r = 0; ERROR: - if (pkg) - pakfire_package_unref(pkg); + if (package) + pakfire_package_unref(package); pakfire_repo_unref(repo); return r;