]> git.ipfire.org Git - pakfire.git/commitdiff
packager: Abort if payload could not be written
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 19 Sep 2022 17:40:03 +0000 (17:40 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 19 Sep 2022 17:40:03 +0000 (17:40 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/packager.c

index 43ac98961c9ee48160e48522a8e0223e81c40ae4..193043183936b6b78d6d4f7be9b6ed7cad657e01 100644 (file)
@@ -444,6 +444,8 @@ int pakfire_packager_finish(struct pakfire_packager* packager, FILE* f) {
        // Write the payload
        r = pakfire_compress(packager->pakfire, a, packager->filelist, nevra,
                PAKFIRE_COMPRESS_SHOW_THROUGHPUT, PAKFIRE_PACKAGER_DIGESTS);
+       if (r)
+               goto ERROR;
 
        // Flush all buffers to disk
        fflush(f);
@@ -462,6 +464,7 @@ int pakfire_packager_finish_to_directory(struct pakfire_packager* packager,
                const char* target, char** result) {
        char path[PATH_MAX];
        char tmppath[PATH_MAX];
+       FILE* f = NULL;
        int r = 1;
 
        // target cannot be empty
@@ -494,14 +497,12 @@ int pakfire_packager_finish_to_directory(struct pakfire_packager* packager,
                goto ERROR;
 
        // Create a temporary result file
-       FILE* f = pakfire_mktemp(tmppath);
+       f = pakfire_mktemp(tmppath);
        if (!f)
                goto ERROR;
 
        // Write the finished package
        r = pakfire_packager_finish(packager, f);
-       fclose(f);
-
        if (r) {
                ERROR(packager->pakfire, "pakfire_packager_finish() failed: %m\n");
                goto ERROR;
@@ -529,6 +530,9 @@ int pakfire_packager_finish_to_directory(struct pakfire_packager* packager,
        r = 0;
 
 ERROR:
+       if (f)
+               fclose(f);
+
        // Remove temporary file
        if (r && *tmppath)
                unlink(tmppath);