]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/technical/api-argv-array.txt
Merge branch 'ds/feature-macros'
[thirdparty/git.git] / Documentation / technical / api-argv-array.txt
CommitLineData
c1189cae
JK
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
204f6d69 11The string-list API (documented in string-list.h) is similar, but cannot be
c1189cae
JK
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
d15bbe13
JK
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
c1189cae
JK
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
85b34324
PT
49`argv_array_pushv`::
50 Push a null-terminated array of strings onto the end of the array.
51
fe4a0a28
JK
52`argv_array_pop`::
53 Remove the final element from the array. If there are no
54 elements in the array, do nothing.
55
c1189cae
JK
56`argv_array_clear`::
57 Free all memory associated with the array and return it to the
58 initial, empty state.
b992657e
JK
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.