2 #include "argv-array.h"
5 const char *empty_argv
[] = { NULL
};
7 void argv_array_init(struct argv_array
*array
)
9 array
->argv
= empty_argv
;
14 static void argv_array_push_nodup(struct argv_array
*array
, const char *value
)
16 if (array
->argv
== empty_argv
)
19 ALLOC_GROW(array
->argv
, array
->argc
+ 2, array
->alloc
);
20 array
->argv
[array
->argc
++] = value
;
21 array
->argv
[array
->argc
] = NULL
;
24 void argv_array_push(struct argv_array
*array
, const char *value
)
26 argv_array_push_nodup(array
, xstrdup(value
));
29 void argv_array_pushf(struct argv_array
*array
, const char *fmt
, ...)
32 struct strbuf v
= STRBUF_INIT
;
35 strbuf_vaddf(&v
, fmt
, ap
);
38 argv_array_push_nodup(array
, strbuf_detach(&v
, NULL
));
41 void argv_array_pushl(struct argv_array
*array
, ...)
47 while((arg
= va_arg(ap
, const char *)))
48 argv_array_push(array
, arg
);
52 void argv_array_pop(struct argv_array
*array
)
56 free((char *)array
->argv
[array
->argc
- 1]);
57 array
->argv
[array
->argc
- 1] = NULL
;
61 void argv_array_clear(struct argv_array
*array
)
63 if (array
->argv
!= empty_argv
) {
65 for (i
= 0; i
< array
->argc
; i
++)
66 free((char *)array
->argv
[i
]);
69 argv_array_init(array
);