Documentation / technical / api-argv-array.txton commit Merge branch 'tg/t0021-racefix' (8f3ba42)
   1argv-array API
   2==============
   3
   4The argv-array API allows one to dynamically build and store
   5NULL-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
   7always NULL-terminated at the element pointed to by `argv[argc]`. This
   8makes the result suitable for passing to functions expecting to receive
   9argv from main(), or the link:api-run-command.html[run-command API].
  10
  11The string-list API (documented in string-list.h) is similar, but cannot be
  12used for these purposes; instead of storing a straight string pointer,
  13it contains an item structure with a `util` field that is not compatible
  14with the traditional argv interface.
  15
  16Each `argv_array` manages its own memory. Any strings pushed into the
  17array are duplicated, and all memory is freed by argv_array_clear().
  18
  19Data Structures
  20---------------
  21
  22`struct argv_array`::
  23
  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
  28        NULL.
  29
  30Functions
  31---------
  32
  33`argv_array_init`::
  34        Initialize an array. This is no different than assigning from
  35        `ARGV_ARRAY_INIT`.
  36
  37`argv_array_push`::
  38        Push a copy of a string onto the end of the array.
  39
  40`argv_array_pushl`::
  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
  43        argument.
  44
  45`argv_array_pushf`::
  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`.
  48
  49`argv_array_pushv`::
  50        Push a null-terminated array of strings onto the end of the array.
  51
  52`argv_array_pop`::
  53        Remove the final element from the array. If there are no
  54        elements in the array, do nothing.
  55
  56`argv_array_clear`::
  57        Free all memory associated with the array and return it to the
  58        initial, empty state.
  59
  60`argv_array_detach`::
  61        Disconnect the `argv` member from the `argv_array` struct and
  62        return it. The caller is responsible for freeing the memory used
  63        by the array, and by the strings it references. After detaching,
  64        the `argv_array` is in a reinitialized state and can be pushed
  65        into again.