| argv-array API | |
| ============== | |
| The argv-array API allows one to dynamically build and store | |
| NULL-terminated lists. An argv-array maintains the invariant that the | |
| `argv` member always points to a non-NULL array, and that the array is | |
| always NULL-terminated at the element pointed to by `argv[argc]`. This | |
| makes the result suitable for passing to functions expecting to receive | |
| argv from main(), or the link:api-run-command.html[run-command API]. | |
| The link:api-string-list.html[string-list API] is similar, but cannot be | |
| used for these purposes; instead of storing a straight string pointer, | |
| it contains an item structure with a `util` field that is not compatible | |
| with the traditional argv interface. | |
| Each `argv_array` manages its own memory. Any strings pushed into the | |
| array are duplicated, and all memory is freed by argv_array_clear(). | |
| Data Structures | |
| --------------- | |
| `struct argv_array`:: | |
| A single array. This should be initialized by assignment from | |
| `ARGV_ARRAY_INIT`, or by calling `argv_array_init`. The `argv` | |
| member contains the actual array; the `argc` member contains the | |
| number of elements in the array, not including the terminating | |
| NULL. | |
| Functions | |
| --------- | |
| `argv_array_init`:: | |
| Initialize an array. This is no different than assigning from | |
| `ARGV_ARRAY_INIT`. | |
| `argv_array_push`:: | |
| Push a copy of a string onto the end of the array. | |
| `argv_array_pushl`:: | |
| Push a list of strings onto the end of the array. The arguments | |
| should be a list of `const char *` strings, terminated by a NULL | |
| argument. | |
| `argv_array_pushf`:: | |
| Format a string and push it onto the end of the array. This is a | |
| convenience wrapper combining `strbuf_addf` and `argv_array_push`. | |
| `argv_array_clear`:: | |
| Free all memory associated with the array and return it to the | |
| initial, empty state. |