From: Lennart Poettering Date: Tue, 29 Oct 2013 19:09:16 +0000 (+0100) Subject: strv: introduce new STRV_MAKE and STRV_MAKE_EMPTY macros to create string arrays... X-Git-Tag: v209~1739 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=897e7561a0f2b0e502fe57081b5d834876c49d7a;hp=80ba3b84ddf40fccbc21184c2da41d97fe85633d;p=elogind.git strv: introduce new STRV_MAKE and STRV_MAKE_EMPTY macros to create string arrays nicely on the fly --- diff --git a/src/shared/strv.h b/src/shared/strv.h index 737728a3c..6ce21acdb 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 7002b8b1c..f32d02ed8 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[]) {