]> git.ipfire.org Git - pakfire.git/commitdiff
repo: Have pakfire_repo_add_archive return int
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 20 Aug 2021 09:24:50 +0000 (09:24 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 20 Aug 2021 09:24:50 +0000 (09:24 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/include/pakfire/package.h
src/libpakfire/include/pakfire/repo.h
src/libpakfire/repo.c
src/libpakfire/request.c

index 4133e4e3d7c637d0925bb8073391427bf5d17045..61b802ebcdc0a472e14ccb7ccbc15bf38fc0be69 100644 (file)
 
 #include <time.h>
 
+struct pakfire_package;
+
 #include <pakfire/filelist.h>
 #include <pakfire/packagelist.h>
 #include <pakfire/pakfire.h>
 #include <pakfire/repo.h>
 
-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);
 
index 60b4babf21fce4b979b73eff772942c175cd5fa7..252276d614e42f8c399e1d1117a1f7a48ca5998d 100644 (file)
@@ -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
 
index f594fa08b562277e54a8aa97278283bb1afd77f0..233f027416c84e607736cd1f36373a612a5eef6d 100644 (file)
@@ -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) {
index b50a802ae4e714f8b3bbf8c8a6a6922f662d38cd..28a4a1b5fe71d4f4d600207740a4832c92920839 100644 (file)
@@ -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;