]> git.ipfire.org Git - pakfire.git/commitdiff
packager: Allow changing filename in archive
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 9 Mar 2021 23:10:27 +0000 (23:10 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 9 Mar 2021 23:10:27 +0000 (23:10 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/dist.c
src/libpakfire/include/pakfire/packager.h
src/libpakfire/packager.c
tests/libpakfire/packager.c

index ed2ab8caa92f5f21c22c13a59434d00e01dd87a7..7e097bb3b5718d92822f43f2890796ec6e00c449 100644 (file)
@@ -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;
 
index ac2f429791ecd9c0501be7b4987363551752790d..f082b1c0e74f9334e6d16231efbf42863181f582 100644 (file)
@@ -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 */
index 8dd1cf518c54774d4d2dce094c211101d8fa701f..8c43c113b1dcc725565010eed79636c9c3801a70 100644 (file)
@@ -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;
                }
index 624708428cc89ed5fc6c93f361ec60023d17ea52..615511102ba1c771fcdc51fe885a394d7b548630 100644 (file)
@@ -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