]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
stat-util: Add verify_regular_at()
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Tue, 14 Mar 2023 20:05:09 +0000 (21:05 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 22 Mar 2023 11:17:14 +0000 (12:17 +0100)
src/basic/stat-util.c
src/basic/stat-util.h

index 88b8346a0fd9342f0ae483d6ea53174cc93f0dcb..42cefed48d73e29b8f23dd8328adc51a3868459a 100644 (file)
@@ -307,6 +307,18 @@ int fd_verify_regular(int fd) {
         return stat_verify_regular(&st);
 }
 
+int verify_regular_at(int dir_fd, const char *path, bool follow) {
+        struct stat st;
+
+        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
+        assert(path);
+
+        if (fstatat(dir_fd, path, &st, (isempty(path) ? AT_EMPTY_PATH : 0) | (follow ? 0 : AT_SYMLINK_NOFOLLOW)) < 0)
+                return -errno;
+
+        return stat_verify_regular(&st);
+}
+
 int stat_verify_directory(const struct stat *st) {
         assert(st);
 
index de11c0cf7c2b9503fdb8a68f2fccb324e13530b1..4bf15a731d9f8f4401bd6f170b2a27e6ca9deca9 100644 (file)
@@ -65,6 +65,7 @@ int path_is_network_fs(const char *path);
 
 int stat_verify_regular(const struct stat *st);
 int fd_verify_regular(int fd);
+int verify_regular_at(int dir_fd, const char *path, bool follow);
 
 int stat_verify_directory(const struct stat *st);
 int fd_verify_directory(int fd);