Skip to content

Commit 971b1f2

Browse files
HebaWalygitster
authored andcommitted
argv-array: move doc to argv-array.h
Move the documentation from Documentation/technical/api-argv-array.txt to argv-array.h as it's easier for the developers to find the usage information beside the code instead of looking for it in another doc file. Also documentation/technical/api-argv-array.txt is removed because the information it has is now redundant and it'll be hard to keep it up to date and synchronized with the documentation in the header file. Signed-off-by: Heba Waly <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 13aa9c8 commit 971b1f2

File tree

2 files changed

+62
-65
lines changed

2 files changed

+62
-65
lines changed

Documentation/technical/api-argv-array.txt

Lines changed: 0 additions & 65 deletions
This file was deleted.

argv-array.h

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,32 @@
11
#ifndef ARGV_ARRAY_H
22
#define ARGV_ARRAY_H
33

4+
/**
5+
* The argv-array API allows one to dynamically build and store
6+
* NULL-terminated lists. An argv-array maintains the invariant that the
7+
* `argv` member always points to a non-NULL array, and that the array is
8+
* always NULL-terminated at the element pointed to by `argv[argc]`. This
9+
* makes the result suitable for passing to functions expecting to receive
10+
* argv from main().
11+
*
12+
* The string-list API (documented in string-list.h) is similar, but cannot be
13+
* used for these purposes; instead of storing a straight string pointer,
14+
* it contains an item structure with a `util` field that is not compatible
15+
* with the traditional argv interface.
16+
*
17+
* Each `argv_array` manages its own memory. Any strings pushed into the
18+
* array are duplicated, and all memory is freed by argv_array_clear().
19+
*/
20+
421
extern const char *empty_argv[];
522

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+
*/
630
struct argv_array {
731
const char **argv;
832
int argc;
@@ -11,17 +35,55 @@ struct argv_array {
1135

1236
#define ARGV_ARRAY_INIT { empty_argv, 0, 0 }
1337

38+
/**
39+
* Initialize an array. This is no different than assigning from
40+
* `ARGV_ARRAY_INIT`.
41+
*/
1442
void argv_array_init(struct argv_array *);
43+
44+
/* Push a copy of a string onto the end of the array. */
1545
const char *argv_array_push(struct argv_array *, const char *);
46+
47+
/**
48+
* Format a string and push it onto the end of the array. This is a
49+
* convenience wrapper combining `strbuf_addf` and `argv_array_push`.
50+
*/
1651
__attribute__((format (printf,2,3)))
1752
const char *argv_array_pushf(struct argv_array *, const char *fmt, ...);
53+
54+
/**
55+
* Push a list of strings onto the end of the array. The arguments
56+
* should be a list of `const char *` strings, terminated by a NULL
57+
* argument.
58+
*/
1859
LAST_ARG_MUST_BE_NULL
1960
void argv_array_pushl(struct argv_array *, ...);
61+
62+
/* Push a null-terminated array of strings onto the end of the array. */
2063
void argv_array_pushv(struct argv_array *, const char **);
64+
65+
/**
66+
* Remove the final element from the array. If there are no
67+
* elements in the array, do nothing.
68+
*/
2169
void argv_array_pop(struct argv_array *);
70+
2271
/* Splits by whitespace; does not handle quoted arguments! */
2372
void argv_array_split(struct argv_array *, const char *);
73+
74+
/**
75+
* Free all memory associated with the array and return it to the
76+
* initial, empty state.
77+
*/
2478
void argv_array_clear(struct argv_array *);
79+
80+
/**
81+
* Disconnect the `argv` member from the `argv_array` struct and
82+
* return it. The caller is responsible for freeing the memory used
83+
* by the array, and by the strings it references. After detaching,
84+
* the `argv_array` is in a reinitialized state and can be pushed
85+
* into again.
86+
*/
2587
const char **argv_array_detach(struct argv_array *);
2688

2789
#endif /* ARGV_ARRAY_H */

0 commit comments

Comments
 (0)