From: Mike Yuan Date: Sun, 18 Jan 2026 22:04:39 +0000 (+0100) Subject: fs-util: group access_fd() with access_nofollow() X-Git-Tag: v260-rc1~363^2~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9b906ae48ee658ac4aa425b25933efe87c2477e8;p=thirdparty%2Fsystemd.git fs-util: group access_fd() with access_nofollow() --- diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c index 4ca01c74440..0159934ddb3 100644 --- a/src/basic/fs-util.c +++ b/src/basic/fs-util.c @@ -360,6 +360,19 @@ int access_nofollow(const char *path, int mode) { return RET_NERRNO(faccessat(AT_FDCWD, path, mode, AT_SYMLINK_NOFOLLOW)); } +int access_fd(int fd, int mode) { + /* Like access() but operates on an already open fd */ + + if (fd == AT_FDCWD) + return RET_NERRNO(access(".", mode)); + if (fd == XAT_FDROOT) + return RET_NERRNO(access("/", mode)); + + assert(fd >= 0); + + return RET_NERRNO(faccessat(fd, "", mode, AT_EMPTY_PATH)); +} + int touch_fd(int fd, usec_t stamp) { assert(fd >= 0); @@ -697,19 +710,6 @@ char* unlink_and_free(char *p) { return mfree(p); } -int access_fd(int fd, int mode) { - /* Like access() but operates on an already open fd */ - - if (fd == AT_FDCWD) - return RET_NERRNO(access(".", mode)); - if (fd == XAT_FDROOT) - return RET_NERRNO(access("/", mode)); - - assert(fd >= 0); - - return RET_NERRNO(faccessat(fd, "", mode, AT_EMPTY_PATH)); -} - int unlinkat_deallocate(int fd, const char *name, UnlinkDeallocateFlags flags) { _cleanup_close_ int truncate_fd = -EBADF; struct stat st; diff --git a/src/basic/fs-util.h b/src/basic/fs-util.h index b26674d139f..d75c253dbb4 100644 --- a/src/basic/fs-util.h +++ b/src/basic/fs-util.h @@ -42,6 +42,7 @@ int fd_warn_permissions(const char *path, int fd); int stat_warn_permissions(const char *path, const struct stat *st); int access_nofollow(const char *path, int mode); +int access_fd(int fd, int mode); int touch_fd(int fd, usec_t stamp); int touch_file(const char *path, bool parents, usec_t stamp, uid_t uid, gid_t gid, mode_t mode); @@ -86,8 +87,6 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(char*, rmdir_and_free); char* unlink_and_free(char *p); DEFINE_TRIVIAL_CLEANUP_FUNC(char*, unlink_and_free); -int access_fd(int fd, int mode); - typedef enum UnlinkDeallocateFlags { UNLINK_REMOVEDIR = 1 << 0, UNLINK_ERASE = 1 << 1,