From: Zbigniew Jędrzejewski-Szmek Date: Fri, 20 Apr 2018 13:36:20 +0000 (+0200) Subject: Add macro for checking if some flags are set X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=91fc9294277db3702d72083279f20c4a10acff02;p=elogind.git Add macro for checking if some flags are set This way we don't need to repeat the argument twice. I didn't replace all instances. I think it's better to leave out: - asserts - comparisons like x & y == x, which are mathematically equivalent, but here we aren't checking if flags are set, but if the argument fits in the flags. --- diff --git a/src/basic/capability-util.h b/src/basic/capability-util.h index f1e6560fd..47462d2dc 100644 --- a/src/basic/capability-util.h +++ b/src/basic/capability-util.h @@ -43,7 +43,7 @@ static inline void cap_free_charpp(char **p) { static inline bool cap_test_all(uint64_t caps) { uint64_t m; m = (UINT64_C(1) << (cap_last_cap() + 1)) - 1; - return (caps & m) == m; + return FLAGS_SET(caps, m); } #if 0 /// UNNEEDED by elogind diff --git a/src/basic/copy.c b/src/basic/copy.c index cd5ad4dfa..18eea64a9 100644 --- a/src/basic/copy.c +++ b/src/basic/copy.c @@ -81,7 +81,7 @@ static int fd_is_nonblock_pipe(int fd) { if (flags < 0) return -errno; - return (flags & O_NONBLOCK) == O_NONBLOCK ? FD_IS_NONBLOCKING_PIPE : FD_IS_BLOCKING_PIPE; + return FLAGS_SET(flags, O_NONBLOCK) ? FD_IS_NONBLOCKING_PIPE : FD_IS_BLOCKING_PIPE; } int copy_bytes_full( diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c index b7d5c5271..9f17725f1 100644 --- a/src/basic/fs-util.c +++ b/src/basic/fs-util.c @@ -617,10 +617,10 @@ int chase_symlinks(const char *path, const char *original_root, unsigned flags, assert(path); /* Either the file may be missing, or we return an fd to the final object, but both make no sense */ - if ((flags & (CHASE_NONEXISTENT|CHASE_OPEN)) == (CHASE_NONEXISTENT|CHASE_OPEN)) + if (FLAGS_SET(flags, CHASE_NONEXISTENT | CHASE_OPEN)) return -EINVAL; - if ((flags & (CHASE_STEP|CHASE_OPEN)) == (CHASE_STEP|CHASE_OPEN)) + if (FLAGS_SET(flags, CHASE_STEP | CHASE_OPEN)) return -EINVAL; if (isempty(path)) diff --git a/src/basic/macro.h b/src/basic/macro.h index cd3ae8d3a..05f5e9fa6 100644 --- a/src/basic/macro.h +++ b/src/basic/macro.h @@ -357,6 +357,8 @@ static inline unsigned long ALIGN_POWER2(unsigned long u) { #define SET_FLAG(v, flag, b) \ (v) = (b) ? ((v) | (flag)) : ((v) & ~(flag)) +#define FLAGS_SET(v, flags) \ + (((v) & (flags)) == (flags)) #define CASE_F(X) case X: #define CASE_F_1(CASE, X) CASE_F(X) diff --git a/src/basic/process-util.c b/src/basic/process-util.c index b105add79..bc8e69ff3 100644 --- a/src/basic/process-util.c +++ b/src/basic/process-util.c @@ -1371,7 +1371,7 @@ int safe_fork_full( } } - if ((flags & (FORK_NEW_MOUNTNS|FORK_MOUNTNS_SLAVE)) == (FORK_NEW_MOUNTNS|FORK_MOUNTNS_SLAVE)) { + if (FLAGS_SET(flags, FORK_NEW_MOUNTNS | FORK_MOUNTNS_SLAVE)) { /* Optionally, make sure we never propagate mounts to the host. */ diff --git a/src/basic/rm-rf.c b/src/basic/rm-rf.c index 4ebc5c60a..9143f0066 100644 --- a/src/basic/rm-rf.c +++ b/src/basic/rm-rf.c @@ -181,7 +181,7 @@ int rm_rf(const char *path, RemoveFlags flags) { } #if 0 /// elogind does not support BTRFS this directly - if ((flags & (REMOVE_SUBVOLUME|REMOVE_ROOT|REMOVE_PHYSICAL)) == (REMOVE_SUBVOLUME|REMOVE_ROOT|REMOVE_PHYSICAL)) { + if (FLAGS_SET(flags, REMOVE_SUBVOLUME | REMOVE_ROOT | REMOVE_PHYSICAL)) { /* Try to remove as subvolume first */ r = btrfs_subvol_remove(path, BTRFS_REMOVE_RECURSIVE|BTRFS_REMOVE_QUOTA); if (r >= 0) diff --git a/src/core/cgroup.c b/src/core/cgroup.c index 1c8245e0b..bc2af6944 100644 --- a/src/core/cgroup.c +++ b/src/core/cgroup.c @@ -1304,7 +1304,7 @@ const char *unit_get_realized_cgroup_path(Unit *u, CGroupMask mask) { if (u->cgroup_path && u->cgroup_realized && - (u->cgroup_realized_mask & mask) == mask) + FLAGS_SET(u->cgroup_realized_mask, mask)) return u->cgroup_path; u = UNIT_DEREF(u->slice);