strv: introduce new STRV_MAKE and STRV_MAKE_EMPTY macros to create string arrays nicely on the fly
This commit is contained in:
parent
80ba3b84dd
commit
897e7561a0
|
@ -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; \
|
||||
|
|
|
@ -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[]) {
|
||||
|
|
Loading…
Reference in a new issue