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);
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);
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);
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) {