From: Daan De Meyer Date: Tue, 14 Mar 2023 20:05:09 +0000 (+0100) Subject: stat-util: Add verify_regular_at() X-Git-Tag: v254-rc1~958 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bd7a79528cdda2440df7fbbf7c359d77d7297472;p=thirdparty%2Fsystemd.git stat-util: Add verify_regular_at() --- 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);