]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
stat-util: add inode_type_from_string() helper
authorLennart Poettering <lennart@poettering.net>
Tue, 20 Jun 2023 14:18:37 +0000 (16:18 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 3 Jan 2024 17:38:46 +0000 (18:38 +0100)
src/basic/stat-util.c
src/basic/stat-util.h
src/test/test-stat-util.c

index 9bcd63d3e9461e270a4e44d70c124a1e13732fdc..51715668fe718f3447ae802c43a55cfd877728d2 100644 (file)
@@ -516,3 +516,25 @@ const char* inode_type_to_string(mode_t m) {
 
         return NULL;
 }
+
+mode_t inode_type_from_string(const char *s) {
+        if (!s)
+                return MODE_INVALID;
+
+        if (streq(s, "reg"))
+                return S_IFREG;
+        if (streq(s, "dir"))
+                return S_IFDIR;
+        if (streq(s, "lnk"))
+                return S_IFLNK;
+        if (streq(s, "chr"))
+                return S_IFCHR;
+        if (streq(s, "blk"))
+                return S_IFBLK;
+        if (streq(s, "fifo"))
+                return S_IFIFO;
+        if (streq(s, "sock"))
+                return S_IFSOCK;
+
+        return MODE_INVALID;
+}
index ae0aaf8f512a4051e482aef0233c61dd3649cfa4..cb736c36dd66311608211cebbc289e4c8303dd30 100644 (file)
@@ -114,3 +114,4 @@ int inode_compare_func(const struct stat *a, const struct stat *b);
 extern const struct hash_ops inode_hash_ops;
 
 const char* inode_type_to_string(mode_t m);
+mode_t inode_type_from_string(const char *s);
index 5aca207fa42c9202f87287a3c9c56d999d24abae..95137ffcf12e198a7b1cb8d321d8a16a43877794 100644 (file)
@@ -180,6 +180,21 @@ TEST(dir_is_empty) {
         assert_se(dir_is_empty_at(AT_FDCWD, empty_dir, /* ignore_hidden_or_backup= */ false) > 0);
 }
 
+TEST(inode_type_from_string) {
+        static const mode_t types[] = {
+                S_IFREG,
+                S_IFDIR,
+                S_IFLNK,
+                S_IFCHR,
+                S_IFBLK,
+                S_IFIFO,
+                S_IFSOCK,
+        };
+
+        FOREACH_ARRAY(m, types, ELEMENTSOF(types))
+                assert_se(inode_type_from_string(inode_type_to_string(*m)) == *m);
+}
+
 static int intro(void) {
         log_show_color(true);
         return EXIT_SUCCESS;