chiark / gitweb /
Add macro for checking if some flags are set
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 20 Apr 2018 13:36:20 +0000 (15:36 +0200)
committerSven Eden <yamakuzure@gmx.net>
Fri, 24 Aug 2018 14:47:08 +0000 (16:47 +0200)
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.

src/basic/capability-util.h
src/basic/copy.c
src/basic/fs-util.c
src/basic/macro.h
src/basic/process-util.c
src/basic/rm-rf.c
src/core/cgroup.c

index f1e6560fd4f5251773d5522f9cc06001efb7ffb4..47462d2dc64f6b97ce51caf75ba03ffd770a7ca6 100644 (file)
@@ -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
index cd5ad4dfa80846807e9213177feee735cd5644c2..18eea64a991f023f781e45ff2189ab9a83fd1490 100644 (file)
@@ -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(
index b7d5c527122a7ed9411da3e8d81df8e9b8c11b5c..9f17725f19d68fcf53444c8b8e2f5d80a41ede70 100644 (file)
@@ -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))
index cd3ae8d3ab734cba17790739dc0e73f783e0c379..05f5e9fa68bc2cb80dac2133336ae6effa934805 100644 (file)
@@ -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)
index b105add79b41622e3a09ee62d1799943d96a0c31..bc8e69ff3acf8e8b4d8e754a660879c7e08012f3 100644 (file)
@@ -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. */
 
index 4ebc5c60a35936d5af4392b6c8b131e8fd6c748c..9143f0066a0d79f4ff7e367a3bbead141315134c 100644 (file)
@@ -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)
index 1c8245e0bfc0f257c6b064f4488d839e4aaaa73d..bc2af6944041b99f204a432441a6794eff88b938 100644 (file)
@@ -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);