From: Michael Tremer Date: Sun, 7 Mar 2021 18:10:07 +0000 (+0000) Subject: file: Add function to copy attributes from stat() X-Git-Tag: 0.9.28~1285^2~613 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=548b6515603d26dede051309c2f9a2f7aab0bbef;p=pakfire.git file: Add function to copy attributes from stat() Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/file.c b/src/libpakfire/file.c index de6dc384c..2821d48f4 100644 --- a/src/libpakfire/file.c +++ b/src/libpakfire/file.c @@ -65,6 +65,54 @@ PAKFIRE_EXPORT int pakfire_file_create(PakfireFile* file) { return 0; } +PAKFIRE_EXPORT int pakfire_file_copy_stat(PakfireFile file, struct stat* stat) { + if (!stat) + return EINVAL; + + // Set type + switch (stat->st_mode & S_IFMT) { + case S_IFREG: + pakfire_file_set_type(file, REGTYPE); + break; + + case S_IFDIR: + pakfire_file_set_type(file, DIRTYPE); + break; + + case S_IFLNK: + pakfire_file_set_type(file, SYMTYPE); + break; + + case S_IFBLK: + pakfire_file_set_type(file, BLKTYPE); + break; + + case S_IFCHR: + pakfire_file_set_type(file, CHRTYPE); + break; + + case S_IFIFO: + pakfire_file_set_type(file, FIFOTYPE); + break; + } + + // Set mode + pakfire_file_set_mode(file, stat->st_mode); + + // Set size + pakfire_file_set_size(file, stat->st_size); + + // Set user + // XXX + pakfire_file_set_user(file, "root"); + pakfire_file_set_group(file, "root"); + + // Set time + pakfire_file_set_time(file, stat->st_ctime); + + return 0; +} + static void pakfire_file_free(PakfireFile file) { if (file->name) free(file->name); diff --git a/src/libpakfire/include/pakfire/file.h b/src/libpakfire/include/pakfire/file.h index 956d377d9..62510ae98 100644 --- a/src/libpakfire/include/pakfire/file.h +++ b/src/libpakfire/include/pakfire/file.h @@ -22,6 +22,7 @@ #define PAKFIRE_FILE_H #include +#include #include #include @@ -35,6 +36,8 @@ PakfireFile pakfire_file_unref(PakfireFile file); int pakfire_file_cmp(PakfireFile file1, PakfireFile file2); void pakfire_file_sprintf(PakfireFile file, char* str, size_t len); +int pakfire_file_copy_stat(PakfireFile file, struct stat* stat); + const char* pakfire_file_get_name(PakfireFile file); void pakfire_file_set_name(PakfireFile file, const char* name); char* pakfire_file_get_dirname(PakfireFile file);