From: Lennart Poettering Date: Wed, 22 Jan 2025 10:54:34 +0000 (+0100) Subject: fs-util: also add an at_flags_normalize_follow() helper X-Git-Tag: v258-rc1~1532^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F36116%2Fhead;p=thirdparty%2Fsystemd.git fs-util: also add an at_flags_normalize_follow() helper This is the reverse of at_flags_normalize_follow() --- diff --git a/src/basic/fs-util.h b/src/basic/fs-util.h index eb031a0ccde..b2c01079901 100644 --- a/src/basic/fs-util.h +++ b/src/basic/fs-util.h @@ -172,3 +172,12 @@ static inline int at_flags_normalize_nofollow(int flags) { flags |= AT_SYMLINK_NOFOLLOW; return flags; } + +static inline int at_flags_normalize_follow(int flags) { + if (FLAGS_SET(flags, AT_SYMLINK_NOFOLLOW)) { + assert(!FLAGS_SET(flags, AT_SYMLINK_FOLLOW)); + flags &= ~AT_SYMLINK_NOFOLLOW; + } else + flags |= AT_SYMLINK_FOLLOW; + return flags; +} diff --git a/src/basic/stat-util.c b/src/basic/stat-util.c index 2181ee2df51..10bd7c0fe17 100644 --- a/src/basic/stat-util.c +++ b/src/basic/stat-util.c @@ -298,7 +298,7 @@ int inode_same_at(int fda, const char *filea, int fdb, const char *fileb, int fl flags |= AT_EMPTY_PATH; } - int ntha_flags = (flags & AT_EMPTY_PATH) | (FLAGS_SET(flags, AT_SYMLINK_NOFOLLOW) ? 0 : AT_SYMLINK_FOLLOW); + int ntha_flags = at_flags_normalize_follow(flags) & (AT_EMPTY_PATH|AT_SYMLINK_FOLLOW); _cleanup_free_ struct file_handle *ha = NULL, *hb = NULL; int mntida = -1, mntidb = -1;