From: Michael Tremer Date: Tue, 9 Mar 2021 23:10:27 +0000 (+0000) Subject: packager: Allow changing filename in archive X-Git-Tag: 0.9.28~1285^2~583 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=809606febafe8c8f8cd98c891be00ce8309f4370;p=pakfire.git packager: Allow changing filename in archive Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/dist.c b/src/libpakfire/dist.c index ed2ab8caa..7e097bb3b 100644 --- a/src/libpakfire/dist.c +++ b/src/libpakfire/dist.c @@ -77,7 +77,7 @@ PAKFIRE_EXPORT int pakfire_dist(Pakfire pakfire, const char* path, const char* t goto ERROR; // Add the makefile - r = pakfire_packager_add(packager, path); + r = pakfire_packager_add(packager, path, NULL); if (r) goto ERROR; diff --git a/src/libpakfire/include/pakfire/packager.h b/src/libpakfire/include/pakfire/packager.h index ac2f42979..f082b1c0e 100644 --- a/src/libpakfire/include/pakfire/packager.h +++ b/src/libpakfire/include/pakfire/packager.h @@ -34,6 +34,7 @@ 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); +int pakfire_packager_add(struct pakfire_packager* packager, + const char* sourcepath, const char* path); #endif /* PAKFIRE_PACKAGER_H */ diff --git a/src/libpakfire/packager.c b/src/libpakfire/packager.c index 8dd1cf518..8c43c113b 100644 --- a/src/libpakfire/packager.c +++ b/src/libpakfire/packager.c @@ -736,13 +736,20 @@ ERROR: } PAKFIRE_EXPORT int pakfire_packager_add(struct pakfire_packager* packager, - const char* path) { + const char* sourcepath, const char* path) { FILE* f = NULL; // Check if path is set - if (!path) + if (!sourcepath) return EINVAL; + // Use basename if path isn't set + if (!path) { + path = strrchr(sourcepath, '/'); + if (path) + path++; + } + // Payload has already been closed if (!packager->payload) return EINVAL; @@ -752,8 +759,12 @@ PAKFIRE_EXPORT int pakfire_packager_add(struct pakfire_packager* packager, if (!entry) return ENOMEM; + // Set the source path + archive_entry_copy_sourcepath(entry, sourcepath); + // Set path in archive - archive_entry_set_pathname(entry, path); + if (path) + archive_entry_set_pathname(entry, path); // Read all attributes from file int r = archive_read_disk_entry_from_file(packager->reader, entry, -1, NULL); @@ -773,9 +784,9 @@ PAKFIRE_EXPORT int pakfire_packager_add(struct pakfire_packager* packager, // Copy the data of regular files if (archive_entry_filetype(entry) == AE_IFREG) { - f = fopen(path, "r"); + f = fopen(sourcepath, "r"); if (!f) { - ERROR(packager->pakfire, "Could not open %s: %s\n", path, strerror(errno)); + ERROR(packager->pakfire, "Could not open %s: %s\n", sourcepath, strerror(errno)); r = errno; goto ERROR; } diff --git a/tests/libpakfire/packager.c b/tests/libpakfire/packager.c index 624708428..615511102 100644 --- a/tests/libpakfire/packager.c +++ b/tests/libpakfire/packager.c @@ -43,7 +43,7 @@ static int test_create(const struct test* t) { char* path = pakfire_path_join(TEST_SRC_PATH, "data/beep-1.3-2.ip3.x86_64.pfm"); ASSERT(path); - r = pakfire_packager_add(packager, path); + r = pakfire_packager_add(packager, path, NULL); ASSERT(r == 0); // Write archive