]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
stat-util: add fd_verify_directory(), similar to fd_verify_regular()
authorLennart Poettering <lennart@poettering.net>
Fri, 26 Oct 2018 14:51:00 +0000 (16:51 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 26 Nov 2018 17:09:01 +0000 (18:09 +0100)
src/basic/stat-util.c
src/basic/stat-util.h

index 3bef0dfe44fdfba8accd8958b729bc3d218c73f6..8b63eb360b657206a41d9a7e86e6e625298d3153 100644 (file)
@@ -296,3 +296,26 @@ int fd_verify_regular(int fd) {
 
         return stat_verify_regular(&st);
 }
+
+int stat_verify_directory(const struct stat *st) {
+        assert(st);
+
+        if (S_ISLNK(st->st_mode))
+                return -ELOOP;
+
+        if (!S_ISDIR(st->st_mode))
+                return -ENOTDIR;
+
+        return 0;
+}
+
+int fd_verify_directory(int fd) {
+        struct stat st;
+
+        assert(fd >= 0);
+
+        if (fstat(fd, &st) < 0)
+                return -errno;
+
+        return stat_verify_directory(&st);
+}
index 1a725f1da048409fd6c301cb0e8254c861a14245..84400a6083bd6e0e1532899671a1e569fa957d4f 100644 (file)
@@ -59,3 +59,6 @@ int path_is_temporary_fs(const char *path);
 
 int stat_verify_regular(const struct stat *st);
 int fd_verify_regular(int fd);
+
+int stat_verify_directory(const struct stat *st);
+int fd_verify_directory(int fd);