From: Michael Tremer Date: Wed, 17 Aug 2022 13:01:52 +0000 (+0000) Subject: file: Store hardlink/symlink targets X-Git-Tag: 0.9.28~473 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=59d8c727f60e583480b5f84f424581955556cee0;p=pakfire.git file: Store hardlink/symlink targets Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/file.c b/src/libpakfire/file.c index 89aa0a292..1af0b661d 100644 --- a/src/libpakfire/file.c +++ b/src/libpakfire/file.c @@ -63,6 +63,10 @@ struct pakfire_file { time_t ctime; time_t mtime; + // Link destinations + char hardlink[PATH_MAX]; + char symlink[PATH_MAX]; + // Digests struct pakfire_file_digest digests[MAX_DIGESTS]; @@ -130,6 +134,10 @@ int pakfire_file_copy_archive_entry(struct pakfire_file* file, struct archive_en pakfire_file_set_path(file, path); } + // Set links + pakfire_file_set_hardlink(file, archive_entry_hardlink(entry)); + pakfire_file_set_symlink(file, archive_entry_symlink(entry)); + // Set size pakfire_file_set_size(file, archive_entry_size(entry)); @@ -216,6 +224,34 @@ PAKFIRE_EXPORT int pakfire_file_set_path(struct pakfire_file* file, const char* return pakfire_string_set(file->path, path); } +PAKFIRE_EXPORT const char* pakfire_file_get_hardlink(struct pakfire_file* file) { + if (!*file->hardlink) + return NULL; + + return file->hardlink; +} + +PAKFIRE_EXPORT void pakfire_file_set_hardlink(struct pakfire_file* file, const char* link) { + if (!link || !*link) + *file->hardlink = '\0'; + else + pakfire_string_set(file->hardlink, link); +} + +PAKFIRE_EXPORT const char* pakfire_file_get_symlink(struct pakfire_file* file) { + if (!*file->symlink) + return NULL; + + return file->symlink; +} + +PAKFIRE_EXPORT void pakfire_file_set_symlink(struct pakfire_file* file, const char* link) { + if (!link || !*link) + *file->hardlink = '\0'; + else + pakfire_string_set(file->symlink, link); +} + PAKFIRE_EXPORT int pakfire_file_get_type(struct pakfire_file* file) { return file->mode & S_IFMT; } diff --git a/src/libpakfire/include/pakfire/file.h b/src/libpakfire/include/pakfire/file.h index c1f5d1417..19a5375a5 100644 --- a/src/libpakfire/include/pakfire/file.h +++ b/src/libpakfire/include/pakfire/file.h @@ -39,6 +39,11 @@ int pakfire_file_cmp(struct pakfire_file* file1, struct pakfire_file* file2); const char* pakfire_file_get_path(struct pakfire_file* file); int pakfire_file_set_path(struct pakfire_file* file, const char* path); +const char* pakfire_file_get_hardlink(struct pakfire_file* file); +void pakfire_file_set_hardlink(struct pakfire_file* file, const char* link); +const char* pakfire_file_get_symlink(struct pakfire_file* file); +void pakfire_file_set_symlink(struct pakfire_file* file, const char* link); + int pakfire_file_get_type(struct pakfire_file* file); ssize_t pakfire_file_get_size(struct pakfire_file* file);