summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2015-06-10 19:10:47 +0200
committerLennart Poettering <lennart@poettering.net>2015-06-10 19:29:47 +0200
commit2a1288ff89322a2f49c79f6d1832c8164c14a05c (patch)
tree02cc41ade7b814d258b183c0ac88670163194913 /src/shared
parent5410b2ed62289d8ab6575e64951ac7b6bda51d40 (diff)
downloadsystemd-2a1288ff89322a2f49c79f6d1832c8164c14a05c.tar.gz
systemd-2a1288ff89322a2f49c79f6d1832c8164c14a05c.tar.bz2
systemd-2a1288ff89322a2f49c79f6d1832c8164c14a05c.zip
util: introduce CMSG_FOREACH() macro and make use of it everywhere
It's only marginally shorter then the usual for() loop, but certainly more readable.
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/macro.h3
-rw-r--r--src/shared/util.c4
2 files changed, 5 insertions, 2 deletions
diff --git a/src/shared/macro.h b/src/shared/macro.h
index 7ae1ed80b6..cc1c9e73c0 100644
--- a/src/shared/macro.h
+++ b/src/shared/macro.h
@@ -467,4 +467,7 @@ do { \
} \
struct __useless_struct_to_allow_trailing_semicolon__
+#define CMSG_FOREACH(cmsg, mh) \
+ for ((cmsg) = CMSG_FIRSTHDR(mh); (cmsg); (cmsg) = CMSG_NXTHDR((mh), (cmsg)))
+
#include "log.h"
diff --git a/src/shared/util.c b/src/shared/util.c
index a20e7bb2ef..6f6906f877 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -5520,7 +5520,7 @@ int openpt_in_namespace(pid_t pid, int flags) {
if (recvmsg(pair[0], &mh, MSG_NOSIGNAL|MSG_CMSG_CLOEXEC) < 0)
return -errno;
- for (cmsg = CMSG_FIRSTHDR(&mh); cmsg; cmsg = CMSG_NXTHDR(&mh, cmsg))
+ CMSG_FOREACH(cmsg, &mh)
if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) {
int *fds;
unsigned n_fds;
@@ -5908,7 +5908,7 @@ void cmsg_close_all(struct msghdr *mh) {
assert(mh);
- for (cmsg = CMSG_FIRSTHDR(mh); cmsg; cmsg = CMSG_NXTHDR(mh, cmsg))
+ CMSG_FOREACH(cmsg, mh)
if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS)
close_many((int*) CMSG_DATA(cmsg), (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int));
}