Documentation / technical / api-argv-array.txton commit Merge branch 'gp/add-u-A-documentation' (ca8df3d)
   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 link:api-string-list.html[string-list API] 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_pop`::
  50        Remove the final element from the array. If there are no
  51        elements in the array, do nothing.
  52
  53`argv_array_clear`::
  54        Free all memory associated with the array and return it to the
  55        initial, empty state.
  56
  57`argv_array_detach`::
  58        Detach the argv array from the `struct argv_array`, transfering
  59        ownership of the allocated array and strings.
  60
  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.