зеркало из https://github.com/microsoft/git.git
argv-array: add detach function
The usual pattern for an argv array is to initialize it, push in some strings, and then clear it when done. Very occasionally, though, we must do other exotic things with the memory, like freeing the list but keeping the strings. Let's provide a detach function so that callers can make use of our API to build up the array, and then take ownership of it. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
3689539127
Коммит
b992657ed0
|
@ -56,3 +56,10 @@ Functions
|
|||
`argv_array_clear`::
|
||||
Free all memory associated with the array and return it to the
|
||||
initial, empty state.
|
||||
|
||||
`argv_array_detach`::
|
||||
Disconnect the `argv` member from the `argv_array` struct and
|
||||
return it. The caller is responsible for freeing the memory used
|
||||
by the array, and by the strings it references. After detaching,
|
||||
the `argv_array` is in a reinitialized state and can be pushed
|
||||
into again.
|
||||
|
|
11
argv-array.c
11
argv-array.c
|
@ -74,3 +74,14 @@ void argv_array_clear(struct argv_array *array)
|
|||
}
|
||||
argv_array_init(array);
|
||||
}
|
||||
|
||||
const char **argv_array_detach(struct argv_array *array)
|
||||
{
|
||||
if (array->argv == empty_argv)
|
||||
return xcalloc(1, sizeof(const char *));
|
||||
else {
|
||||
const char **ret = array->argv;
|
||||
argv_array_init(array);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,5 +20,6 @@ void argv_array_pushl(struct argv_array *, ...);
|
|||
void argv_array_pushv(struct argv_array *, const char **);
|
||||
void argv_array_pop(struct argv_array *);
|
||||
void argv_array_clear(struct argv_array *);
|
||||
const char **argv_array_detach(struct argv_array *);
|
||||
|
||||
#endif /* ARGV_ARRAY_H */
|
||||
|
|
Загрузка…
Ссылка в новой задаче