diff options
author | Lennart Poettering <lennart@poettering.net> | 2019-01-16 00:13:38 +0100 |
---|---|---|
committer | Adrian Szyndela <adrian.s@samsung.com> | 2020-02-26 11:39:00 +0100 |
commit | 71dda51708c0f9cafff337fda0a02322981dc48c (patch) | |
tree | a14597ecdddbca81eefef94e0963c0f42f22cc72 | |
parent | 7d0be1e0f8a2a104464778ee36cd56e373784d15 (diff) | |
download | systemd-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.h | 15 |
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); |