]> git.ipfire.org Git - pakfire.git/commitdiff
packager: Make filename accessible through extra function
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 9 Mar 2021 22:36:16 +0000 (22:36 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 9 Mar 2021 22:36:16 +0000 (22:36 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/dist.c
src/libpakfire/include/pakfire/packager.h
src/libpakfire/packager.c

index 0ca54341b0aeef7ff83eb3ac56635541b44b35f4..ed2ab8caa92f5f21c22c13a59434d00e01dd87a7 100644 (file)
@@ -92,8 +92,8 @@ PAKFIRE_EXPORT int pakfire_dist(Pakfire pakfire, const char* path, const char* t
        FILE* f = fdopen(fd, "w");
 
        // Write the finished package
-       const char* filename = pakfire_packager_finish(packager, f);
-       if (!filename) {
+       r = pakfire_packager_finish(packager, f);
+       if (r) {
                ERROR(pakfire, "pakfire_packager_finish() failed: %s\n", strerror(errno));
                goto ERROR;
        }
@@ -101,8 +101,13 @@ PAKFIRE_EXPORT int pakfire_dist(Pakfire pakfire, const char* path, const char* t
        // Close the file
        fclose(f);
 
+       char* filename = pakfire_packager_filename(packager);
+       if (!filename)
+               goto ERROR;
+
        // Move the temporary file to destination
        r = renameat(AT_FDCWD, tempfile, dfd, filename);
+       free(filename);
        if (r)
                goto ERROR;
 
index 0c667ce4108ade70871c6e613a98c927ec252fee..ac2f429791ecd9c0501be7b4987363551752790d 100644 (file)
@@ -30,7 +30,9 @@ int pakfire_packager_create(struct pakfire_packager** packager, PakfirePackage p
 struct pakfire_packager* pakfire_packager_ref(struct pakfire_packager* packager);
 struct pakfire_packager* pakfire_packager_unref(struct pakfire_packager* packager);
 
-const char* pakfire_packager_finish(struct pakfire_packager* packager, FILE* f);
+char* pakfire_packager_filename(struct pakfire_packager* packager);
+
+int pakfire_packager_finish(struct pakfire_packager* packager, FILE* f);
 
 int pakfire_packager_add(struct pakfire_packager* packager, const char* path);
 
index 4ca473e97e43060cfad1520c3d1b9654edd7eba3..8dd1cf518c54774d4d2dce094c211101d8fa701f 100644 (file)
@@ -49,8 +49,6 @@ struct pakfire_packager {
        int nrefs;
        time_t time_created;
 
-       char filename[NAME_MAX + 1];
-
        PakfirePackage pkg;
        PakfireFilelist filelist;
 
@@ -220,10 +218,6 @@ PAKFIRE_EXPORT int pakfire_packager_create(struct pakfire_packager** packager,
        // Store a reference to the package
        p->pkg = pakfire_package_ref(pkg);
 
-       // Create filename
-       snprintf(p->filename, sizeof(p->filename) - 1,
-               "%s.pfm", pakfire_package_get_nevra(p->pkg));
-
        // Create a new filelist
        int r = pakfire_filelist_create(&p->filelist, p->pakfire);
        if (r)
@@ -266,6 +260,27 @@ PAKFIRE_EXPORT struct pakfire_packager* pakfire_packager_unref(
        return NULL;
 }
 
+PAKFIRE_EXPORT char* pakfire_packager_filename(struct pakfire_packager* packager) {
+       char* buffer = NULL;
+
+       // Get nevra
+       char* nevra = pakfire_package_get_nevra(packager->pkg);
+       if (!nevra)
+               return NULL;
+
+       int r = asprintf(&buffer, "%s.pfm", nevra);
+       free(nevra);
+
+       if (r < 0) {
+               if (buffer)
+                       free(buffer);
+
+               return NULL;
+       }
+
+       return buffer;
+}
+
 static int pakfire_packager_copy_data(struct pakfire_packager* packager,
                struct archive* a, FILE* f) {
        char buffer[BUFFER_SIZE];
@@ -665,8 +680,8 @@ ERROR:
 
        It will create a new archive and write the package to the given file descriptor.
 */
-PAKFIRE_EXPORT const char* pakfire_packager_finish(struct pakfire_packager* packager, FILE* f) {
-       char* filename = NULL;
+PAKFIRE_EXPORT int pakfire_packager_finish(struct pakfire_packager* packager, FILE* f) {
+       int r = 1;
 
        // Store total instal size
        pakfire_package_set_installsize(packager->pkg,
@@ -680,7 +695,7 @@ PAKFIRE_EXPORT const char* pakfire_packager_finish(struct pakfire_packager* pack
        }
 
        // Use the PAX format
-       int r = archive_write_set_format_pax(a);
+       r = archive_write_set_format_pax(a);
        if (r) {
                ERROR(packager->pakfire, "Could not set format to PAX: %s\n",
                        archive_error_string(a));
@@ -710,14 +725,14 @@ PAKFIRE_EXPORT const char* pakfire_packager_finish(struct pakfire_packager* pack
        if (r)
                goto ERROR;
 
-       // Return the filename
-       filename = packager->filename;
+       // Success
+       r = 0;
 
 ERROR:
        if (a)
                archive_free(a);
 
-       return filename;
+       return r;
 }
 
 PAKFIRE_EXPORT int pakfire_packager_add(struct pakfire_packager* packager,