mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-23 17:34:00 +03:00
util: add new FOREACH_STRING() macro as syntactic sugar to iterate through a number of fixed strings
This commit is contained in:
parent
cb9da7f24f
commit
c4a7b2c56e
@ -119,3 +119,15 @@ void strv_print(char **l);
|
||||
})
|
||||
|
||||
#define STR_IN_SET(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]; \
|
||||
}))
|
||||
|
@ -656,6 +656,25 @@ static void test_log2i(void) {
|
||||
assert_se(log2i(INT_MAX) == sizeof(int)*8-2);
|
||||
}
|
||||
|
||||
static void test_foreach_string(void) {
|
||||
const char * const t[] = {
|
||||
"foo",
|
||||
"bar",
|
||||
"waldo",
|
||||
NULL
|
||||
};
|
||||
const char *x;
|
||||
unsigned i = 0;
|
||||
|
||||
FOREACH_STRING(x, "foo", "bar", "waldo")
|
||||
assert_se(streq_ptr(t[i++], x));
|
||||
|
||||
assert_se(i == 3);
|
||||
|
||||
FOREACH_STRING(x, "zzz")
|
||||
assert_se(streq(x, "zzz"));
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
log_parse_environment();
|
||||
log_open();
|
||||
@ -699,6 +718,7 @@ int main(int argc, char *argv[]) {
|
||||
test_writing_tmpfile();
|
||||
test_hexdump();
|
||||
test_log2i();
|
||||
test_foreach_string();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user