summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2019-01-16 00:13:38 +0100
committerAdrian Szyndela <adrian.s@samsung.com>2020-02-26 11:39:00 +0100
commit71dda51708c0f9cafff337fda0a02322981dc48c (patch)
treea14597ecdddbca81eefef94e0963c0f42f22cc72
parent7d0be1e0f8a2a104464778ee36cd56e373784d15 (diff)
downloadsystemd-71dda51708c0f9cafff337fda0a02322981dc48c.tar.gz
systemd-71dda51708c0f9cafff337fda0a02322981dc48c.tar.bz2
systemd-71dda51708c0f9cafff337fda0a02322981dc48c.zip
(backport) strv: rework FOREACH_STRING() macrosandbox/adrians/upgrade-to-234
So it's apparently problematic that we use STRV_MAKE() (i.e. a compound initializer) outside of the {} block we use it in (and that includes outside of the ({}) block, too). Hence, let's rework the macro to not need that. This also makes the macro shorter, which is definitely a good and more readable. Moreover, it will now complain if the iterator is a "char*" instead of a "const char*", which is good too. Fixes: #11394 Change-Id: Ibc21cdd5583c3b6a079b8691bbac5e076819432a
-rw-r--r--src/basic/strv.h15
1 files changed, 4 insertions, 11 deletions
diff --git a/src/basic/strv.h b/src/basic/strv.h
index 385ad17779..172b99ee89 100644
--- a/src/basic/strv.h
+++ b/src/basic/strv.h
@@ -150,17 +150,10 @@ void strv_print(char **l);
_x && strv_contains(STRV_MAKE(__VA_ARGS__), _x); \
})
-#define FOREACH_STRING(x, ...) \
- for (char **_l = ({ \
- char **_ll = STRV_MAKE(__VA_ARGS__); \
- x = _ll ? _ll[0] : NULL; \
- _ll; \
- }); \
- _l && *_l; \
- x = ({ \
- _l ++; \
- _l[0]; \
- }))
+#define FOREACH_STRING(x, y, ...) \
+ for (char **_l = STRV_MAKE(({ x = y; }), ##__VA_ARGS__); \
+ x; \
+ x = *(++_l))
char **strv_reverse(char **l);
char **strv_shell_escape(char **l, const char *bad);