char **strv_uniq(char **l);
#if 0 /// UNNEEDED by elogind
bool strv_is_uniq(char **l);
+#endif // 0
bool strv_equal(char **a, char **b);
-#endif // 0
#define strv_contains(l, s) (!!strv_find((l), (s)))
char **strv_split(const char *s, const char *separator);
#if 0 /// UNNEEDED by elogind
char **strv_split_newlines(const char *s);
+#endif // 0
int strv_split_extract(char ***t, const char *s, const char *separators, ExtractFlags flags);
-#endif // 0
char *strv_join(char **l, const char *separator);
#if 0 /// UNNEEDED by elogind
for ((x) = (l), (y) = (x+1); (x) && *(x) && *(y); (x) += 2, (y) = (x + 1))
char **strv_sort(char **l);
-#if 0 /// UNNEEDED by elogind
void strv_print(char **l);
-#endif // 0
#define STRV_MAKE(...) ((char**) ((const char*[]) { __VA_ARGS__, NULL }))
})
#define STR_IN_SET(x, ...) strv_contains(STRV_MAKE(__VA_ARGS__), x)
+#define STRPTR_IN_SET(x, ...) \
+ ({ \
+ const char* _x = (x); \
+ _x && strv_contains(STRV_MAKE(__VA_ARGS__), _x); \
+ })
#define FOREACH_STRING(x, ...) \
for (char **_l = ({ \
char ***strv_free_free(char ***l);
char **strv_skip(char **l, size_t n);
+#endif // 0
int strv_extend_n(char ***l, const char *value, size_t n);
+#if 0 /// UNNEEDED by elogind
int fputstrv(FILE *f, char **l, const char *separator, bool *space);
#endif // 0