]> git.ipfire.org Git - people/ms/pakfire.git/commitdiff
file: Add function to copy attributes from stat()
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 7 Mar 2021 18:10:07 +0000 (18:10 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 7 Mar 2021 18:10:07 +0000 (18:10 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/file.c
src/libpakfire/include/pakfire/file.h

index de6dc384cbe322fc90509e45b10b529f8ddc572b..2821d48f4a5e238590eae19a3ab7d1aad3e5cea2 100644 (file)
@@ -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);
index 956d377d9492392010a083df0de2a7c5aca8dea6..62510ae98a358e7f9bb6462a6b613e4b2d92f2e2 100644 (file)
@@ -22,6 +22,7 @@
 #define PAKFIRE_FILE_H
 
 #include <sys/types.h>
+#include <sys/stat.h>
 #include <time.h>
 #include <unistd.h>
 
@@ -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);