From bd7a79528cdda2440df7fbbf7c359d77d7297472 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Tue, 14 Mar 2023 21:05:09 +0100 Subject: [PATCH] stat-util: Add verify_regular_at() --- src/basic/stat-util.c | 12 ++++++++++++ src/basic/stat-util.h | 1 + 2 files changed, 13 insertions(+) diff --git a/src/basic/stat-util.c b/src/basic/stat-util.c index 88b8346a0fd..42cefed48d7 100644 --- a/src/basic/stat-util.c +++ b/src/basic/stat-util.c @@ -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); diff --git a/src/basic/stat-util.h b/src/basic/stat-util.h index de11c0cf7c2..4bf15a731d9 100644 --- a/src/basic/stat-util.h +++ b/src/basic/stat-util.h @@ -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); -- 2.47.3