]> git.ipfire.org Git - pakfire.git/commitdiff
packager: Create a helper function to create files in tarball
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 9 Mar 2021 18:22:56 +0000 (18:22 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 9 Mar 2021 18:22:56 +0000 (18:22 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/packager.c

index 51f0643205c3e65b06d8ad39aa0df3bc084c9594..f0f5974abb843d54d46a22d744817a7f4658bbaf 100644 (file)
@@ -286,12 +286,12 @@ static int pakfire_packager_copy_data(struct pakfire_packager* packager,
        return 0;
 }
 
-static int pakfire_packager_write_file_from_buffer(struct pakfire_packager* packager,
-               struct archive* a, const char* filename, const char* buffer) {
+static struct archive_entry* pakfire_packager_create_file(
+               struct pakfire_packager* packager, const char* filename, size_t size) {
        // Create a new file entry
        struct archive_entry* entry = archive_entry_new();
        if (!entry)
-               return 1;
+               return NULL;
 
        // Set filename
        archive_entry_set_pathname(entry, filename);
@@ -300,6 +300,9 @@ static int pakfire_packager_write_file_from_buffer(struct pakfire_packager* pack
     archive_entry_set_filetype(entry, AE_IFREG);
     archive_entry_set_perm(entry, 0644);
 
+       // Set size
+       archive_entry_set_size(entry, size);
+
        // Set ownership
        archive_entry_set_uname(entry, "root");
        archive_entry_set_uid(entry, 0);
@@ -312,8 +315,17 @@ static int pakfire_packager_write_file_from_buffer(struct pakfire_packager* pack
        archive_entry_set_mtime(entry, packager->time_created, 0);
        archive_entry_set_atime(entry, packager->time_created, 0);
 
-       // Set length
-       archive_entry_set_size(entry, strlen(buffer));
+       return entry;
+}
+
+static int pakfire_packager_write_file_from_buffer(struct pakfire_packager* packager,
+               struct archive* a, const char* filename, const char* buffer) {
+       size_t size = strlen(buffer);
+
+       // Create a new file
+       struct archive_entry* entry = pakfire_packager_create_file(packager, filename, size);
+       if (!entry)
+               return 1;
 
        // This is the end of the header
        int r = archive_write_header(a, entry);
@@ -615,21 +627,12 @@ static int pakfire_packager_write_payload(struct pakfire_packager* packager,
                return 1;
        }
 
-       // Create a new file entry
-       struct archive_entry* entry = archive_entry_new();
+       // Create a new file
+       struct archive_entry* entry = pakfire_packager_create_file(packager,
+                       PAKFIRE_ARCHIVE_FN_PAYLOAD, st.st_size);
        if (!entry)
                return 1;
 
-       // Set filename
-       archive_entry_set_pathname(entry, PAKFIRE_ARCHIVE_FN_PAYLOAD);
-
-       // This is a regular file
-       archive_entry_set_filetype(entry, AE_IFREG);
-       archive_entry_set_perm(entry, 0644);
-
-       // Set the file size
-       archive_entry_set_size(entry, st.st_size);
-
        // This is the end of the header
        r = archive_write_header(a, entry);
        if (r) {