From: Michael Tremer Date: Tue, 9 Mar 2021 22:36:16 +0000 (+0000) Subject: packager: Make filename accessible through extra function X-Git-Tag: 0.9.28~1285^2~584 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=96d2c7bc2324c1f13c131eafec71f3e9b045be98;p=pakfire.git packager: Make filename accessible through extra function Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/dist.c b/src/libpakfire/dist.c index 0ca54341b..ed2ab8caa 100644 --- a/src/libpakfire/dist.c +++ b/src/libpakfire/dist.c @@ -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; diff --git a/src/libpakfire/include/pakfire/packager.h b/src/libpakfire/include/pakfire/packager.h index 0c667ce41..ac2f42979 100644 --- a/src/libpakfire/include/pakfire/packager.h +++ b/src/libpakfire/include/pakfire/packager.h @@ -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); diff --git a/src/libpakfire/packager.c b/src/libpakfire/packager.c index 4ca473e97..8dd1cf518 100644 --- a/src/libpakfire/packager.c +++ b/src/libpakfire/packager.c @@ -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,