]> git.ipfire.org Git - people/stevee/pakfire.git/commitdiff
file: Add function to return data as archive_entry
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 17 Aug 2022 13:02:21 +0000 (13:02 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 17 Aug 2022 13:02:21 +0000 (13:02 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/file.c
src/libpakfire/include/pakfire/file.h

index 1af0b661dd96bf0221e6ade85b766c59c265a47a..47e038441383f8faf6825a501f96be12ddaaa62b 100644 (file)
@@ -170,6 +170,46 @@ int pakfire_file_copy_archive_entry(struct pakfire_file* file, struct archive_en
        return r;
 }
 
+struct archive_entry* pakfire_file_archive_entry(struct pakfire_file* file) {
+       struct archive_entry* entry = archive_entry_new();
+       if (!entry) {
+               ERROR(file->pakfire, "Could not allocate archive entry: %m\n");
+               return NULL;
+       }
+
+       // Set path
+       archive_entry_copy_pathname(entry, pakfire_file_get_path(file));
+
+       // Set source path
+       archive_entry_copy_sourcepath(entry, file->abspath);
+
+       // Set links
+       if (*file->hardlink)
+               archive_entry_set_hardlink(entry, file->hardlink);
+       if (*file->symlink)
+               archive_entry_set_symlink(entry, file->symlink);
+
+       // Set size
+       archive_entry_set_size(entry, pakfire_file_get_size(file));
+
+       // Set mode
+       archive_entry_set_mode(entry, pakfire_file_get_mode(file));
+
+       // Set user
+       archive_entry_set_uname(entry, pakfire_file_get_user(file));
+
+       // Set group
+       archive_entry_set_gname(entry, pakfire_file_get_group(file));
+
+       // Set times
+       archive_entry_set_ctime(entry, pakfire_file_get_ctime(file), 0);
+       archive_entry_set_mtime(entry, pakfire_file_get_mtime(file), 0);
+
+       // XXX copy digest
+
+       return entry;
+}
+
 static void pakfire_file_free(struct pakfire_file* file) {
        struct pakfire_file_digest* digest = NULL;
 
index 19a5375a5f9f5f1fd1c871b4adef27b22cf66bcc..210b3dc027c81eb42ebff647eb7d4385d6afaf56 100644 (file)
@@ -81,6 +81,7 @@ struct pakfire_file* pakfire_file_parse_from_file(const char* list, unsigned int
 int pakfire_file_create_from_archive_entry(struct pakfire_file** file, struct pakfire* pakfire,
                struct archive_entry* entry);
 int pakfire_file_copy_archive_entry(struct pakfire_file* file, struct archive_entry* entry);
+struct archive_entry* pakfire_file_archive_entry(struct pakfire_file* file);
 
 const char* pakfire_file_get_abspath(struct pakfire_file* file);
 int pakfire_file_set_abspath(struct pakfire_file* file, const char* path);