path: root/Documentation/technical/api-argv-array.txt
diff options
authorJunio C Hamano <>2011-10-26 23:13:31 (GMT)
committerJunio C Hamano <>2011-10-26 23:13:31 (GMT)
commit60f60b49629b6693ce5b8ce9201b2f6dd3989354 (patch)
tree6207a4c3e49edccf3da2627135b55373b693a7d3 /Documentation/technical/api-argv-array.txt
parent7bb07f6fbfeca68a71580a7d8b2228f19b4a9820 (diff)
parent5d40a179855a39ae9e8ac22e1874720f2b98a91c (diff)
Merge branch 'jk/argv-array' into maint
* jk/argv-array: run_hook: use argv_array API checkout: use argv_array API bisect: use argv_array API quote: provide sq_dequote_to_argv_array refactor argv_array into generic code quote.h: fix bogus comment add sha1_array API docs
Diffstat (limited to 'Documentation/technical/api-argv-array.txt')
1 files changed, 46 insertions, 0 deletions
diff --git a/Documentation/technical/api-argv-array.txt b/Documentation/technical/api-argv-array.txt
new file mode 100644
index 0000000..49b3d52
--- /dev/null
+++ b/Documentation/technical/api-argv-array.txt
@@ -0,0 +1,46 @@
+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
+ Initialize an array. This is no different than assigning from
+ Push a copy of a string onto the end of the array.
+ Format a string and push it onto the end of the array. This is a
+ convenience wrapper combining `strbuf_addf` and `argv_array_push`.
+ Free all memory associated with the array and return it to the
+ initial, empty state.