4 The argv-array API allows one to dynamically build and store
5 NULL-terminated lists. An argv-array maintains the invariant that the
6 `argv` member always points to a non-NULL array, and that the array is
7 always NULL-terminated at the element pointed to by `argv[argc]`. This
8 makes the result suitable for passing to functions expecting to receive
9 argv from main(), or the link:api-run-command.html[run-command API].
11 The link:api-string-list.html[string-list API] is similar, but cannot be
12 used for these purposes; instead of storing a straight string pointer,
13 it contains an item structure with a `util` field that is not compatible
14 with the traditional argv interface.
16 Each `argv_array` manages its own memory. Any strings pushed into the
17 array are duplicated, and all memory is freed by argv_array_clear().
24 A single array. This should be initialized by assignment from
25 `ARGV_ARRAY_INIT`, or by calling `argv_array_init`. The `argv`
26 member contains the actual array; the `argc` member contains the
27 number of elements in the array, not including the terminating
34 Initialize an array. This is no different than assigning from
38 Push a copy of a string onto the end of the array.
41 Push a list of strings onto the end of the array. The arguments
42 should be a list of `const char *` strings, terminated by a NULL
46 Format a string and push it onto the end of the array. This is a
47 convenience wrapper combining `strbuf_addf` and `argv_array_push`.
50 Remove the final element from the array. If there are no
51 elements in the array, do nothing.
54 Free all memory associated with the array and return it to the
58 Detach the argv array from the `struct argv_array`, transfering
59 ownership of the allocated array and strings.
61 `argv_array_free_detached`::
62 Free the memory allocated by a `struct argv_array` that was later
63 detached and is now no longer needed.