From: Michael Tremer Date: Tue, 9 Mar 2021 18:22:56 +0000 (+0000) Subject: packager: Create a helper function to create files in tarball X-Git-Tag: 0.9.28~1285^2~587 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=28700a5ba48d667fdf605a7cf3392c52a6b55fdf;p=pakfire.git packager: Create a helper function to create files in tarball Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/packager.c b/src/libpakfire/packager.c index 51f064320..f0f5974ab 100644 --- a/src/libpakfire/packager.c +++ b/src/libpakfire/packager.c @@ -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) {