summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/shared/strv.h6
-rw-r--r--src/test/test-strv.c8
2 files changed, 9 insertions, 5 deletions
diff --git a/src/shared/strv.h b/src/shared/strv.h
index 737728a3c6..6ce21acdbd 100644
--- a/src/shared/strv.h
+++ b/src/shared/strv.h
@@ -86,12 +86,16 @@ bool strv_overlap(char **a, char **b) _pure_;
char **strv_sort(char **l);
void strv_print(char **l);
+#define STRV_MAKE(...) ((char**) ((const char*[]) { __VA_ARGS__, NULL }))
+
+#define STRV_MAKE_EMPTY ((char*[1]) { NULL })
+
#define strv_from_stdarg_alloca(first) \
({ \
char **_l; \
\
if (!first) \
- _l = ((char*[1]) { NULL }); \
+ _l = (char**) &first; \
else { \
unsigned _n; \
va_list _ap; \
diff --git a/src/test/test-strv.c b/src/test/test-strv.c
index 7002b8b1c0..f32d02ed85 100644
--- a/src/test/test-strv.c
+++ b/src/test/test-strv.c
@@ -324,7 +324,7 @@ static void test_strv_foreach_pair(void) {
}
}
-static void test_strv_from_stdarg_alloca_one(const char **l, const char *first, ...) {
+static void test_strv_from_stdarg_alloca_one(char **l, const char *first, ...) {
char **j;
unsigned i;
@@ -339,9 +339,9 @@ static void test_strv_from_stdarg_alloca_one(const char **l, const char *first,
}
static void test_strv_from_stdarg_alloca(void) {
- test_strv_from_stdarg_alloca_one((const char*[]) { "foo", "bar", NULL }, "foo", "bar", NULL);
- test_strv_from_stdarg_alloca_one((const char*[]) { "foo", "bar", NULL }, "foo", "bar", NULL);
- test_strv_from_stdarg_alloca_one((const char*[]) { "foo", NULL }, "foo", NULL);
+ test_strv_from_stdarg_alloca_one(STRV_MAKE("foo", "bar"), "foo", "bar", NULL);
+ test_strv_from_stdarg_alloca_one(STRV_MAKE("foo"), "foo", NULL);
+ test_strv_from_stdarg_alloca_one(STRV_MAKE_EMPTY, NULL);
}
int main(int argc, char *argv[]) {