#include "argv-array.h"
#include "strbuf.h"
-const char *empty_argv[] = { NULL };
+const char *empty_strvec[] = { NULL };
-void argv_array_init(struct argv_array *array)
+void strvec_init(struct strvec *array)
{
- array->argv = empty_argv;
+ array->argv = empty_strvec;
array->argc = 0;
array->alloc = 0;
}
-static void argv_array_push_nodup(struct argv_array *array, const char *value)
+static void strvec_push_nodup(struct strvec *array, const char *value)
{
- if (array->argv == empty_argv)
+ if (array->argv == empty_strvec)
array->argv = NULL;
ALLOC_GROW(array->argv, array->argc + 2, array->alloc);
array->argv[array->argc] = NULL;
}
-const char *argv_array_push(struct argv_array *array, const char *value)
+const char *strvec_push(struct strvec *array, const char *value)
{
- argv_array_push_nodup(array, xstrdup(value));
+ strvec_push_nodup(array, xstrdup(value));
return array->argv[array->argc - 1];
}
-const char *argv_array_pushf(struct argv_array *array, const char *fmt, ...)
+const char *strvec_pushf(struct strvec *array, const char *fmt, ...)
{
va_list ap;
struct strbuf v = STRBUF_INIT;
strbuf_vaddf(&v, fmt, ap);
va_end(ap);
- argv_array_push_nodup(array, strbuf_detach(&v, NULL));
+ strvec_push_nodup(array, strbuf_detach(&v, NULL));
return array->argv[array->argc - 1];
}
-void argv_array_pushl(struct argv_array *array, ...)
+void strvec_pushl(struct strvec *array, ...)
{
va_list ap;
const char *arg;
va_start(ap, array);
while ((arg = va_arg(ap, const char *)))
- argv_array_push(array, arg);
+ strvec_push(array, arg);
va_end(ap);
}
-void argv_array_pushv(struct argv_array *array, const char **argv)
+void strvec_pushv(struct strvec *array, const char **argv)
{
for (; *argv; argv++)
- argv_array_push(array, *argv);
+ strvec_push(array, *argv);
}
-void argv_array_pop(struct argv_array *array)
+void strvec_pop(struct strvec *array)
{
if (!array->argc)
return;
array->argc--;
}
-void argv_array_split(struct argv_array *array, const char *to_split)
+void strvec_split(struct strvec *array, const char *to_split)
{
while (isspace(*to_split))
to_split++;
while (*p && !isspace(*p))
p++;
- argv_array_push_nodup(array, xstrndup(to_split, p - to_split));
+ strvec_push_nodup(array, xstrndup(to_split, p - to_split));
while (isspace(*p))
p++;
}
}
-void argv_array_clear(struct argv_array *array)
+void strvec_clear(struct strvec *array)
{
- if (array->argv != empty_argv) {
+ if (array->argv != empty_strvec) {
int i;
for (i = 0; i < array->argc; i++)
free((char *)array->argv[i]);
free(array->argv);
}
- argv_array_init(array);
+ strvec_init(array);
}
-const char **argv_array_detach(struct argv_array *array)
+const char **strvec_detach(struct strvec *array)
{
- if (array->argv == empty_argv)
+ if (array->argv == empty_strvec)
return xcalloc(1, sizeof(const char *));
else {
const char **ret = array->argv;
- argv_array_init(array);
+ strvec_init(array);
return ret;
}
}
* 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().
+ * Each `strvec` manages its own memory. Any strings pushed into the
+ * array are duplicated, and all memory is freed by strvec_clear().
*/
-extern const char *empty_argv[];
+extern const char *empty_strvec[];
/**
* A single array. This should be initialized by assignment from
- * `ARGV_ARRAY_INIT`, or by calling `argv_array_init`. The `argv`
+ * `STRVEC_INIT`, or by calling `strvec_init`. The `argv`
* member contains the actual array; the `argc` member contains the
* number of elements in the array, not including the terminating
* NULL.
*/
-struct argv_array {
+struct strvec {
const char **argv;
size_t argc;
size_t alloc;
};
-#define ARGV_ARRAY_INIT { empty_argv, 0, 0 }
+#define STRVEC_INIT { empty_strvec, 0, 0 }
/**
* Initialize an array. This is no different than assigning from
- * `ARGV_ARRAY_INIT`.
+ * `STRVEC_INIT`.
*/
-void argv_array_init(struct argv_array *);
+void strvec_init(struct strvec *);
/* Push a copy of a string onto the end of the array. */
-const char *argv_array_push(struct argv_array *, const char *);
+const char *strvec_push(struct strvec *, const char *);
/**
* Format a string and push it onto the end of the array. This is a
- * convenience wrapper combining `strbuf_addf` and `argv_array_push`.
+ * convenience wrapper combining `strbuf_addf` and `strvec_push`.
*/
__attribute__((format (printf,2,3)))
-const char *argv_array_pushf(struct argv_array *, const char *fmt, ...);
+const char *strvec_pushf(struct strvec *, const char *fmt, ...);
/**
* Push a list of strings onto the end of the array. The arguments
* argument.
*/
LAST_ARG_MUST_BE_NULL
-void argv_array_pushl(struct argv_array *, ...);
+void strvec_pushl(struct strvec *, ...);
/* Push a null-terminated array of strings onto the end of the array. */
-void argv_array_pushv(struct argv_array *, const char **);
+void strvec_pushv(struct strvec *, const char **);
/**
* Remove the final element from the array. If there are no
* elements in the array, do nothing.
*/
-void argv_array_pop(struct argv_array *);
+void strvec_pop(struct strvec *);
/* Splits by whitespace; does not handle quoted arguments! */
-void argv_array_split(struct argv_array *, const char *);
+void strvec_split(struct strvec *, const char *);
/**
* Free all memory associated with the array and return it to the
* initial, empty state.
*/
-void argv_array_clear(struct argv_array *);
+void strvec_clear(struct strvec *);
/**
- * Disconnect the `argv` member from the `argv_array` struct and
+ * Disconnect the `argv` member from the `strvec` 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
+ * the `strvec` is in a reinitialized state and can be pushed
* into again.
*/
-const char **argv_array_detach(struct argv_array *);
+const char **strvec_detach(struct strvec *);
+
+/* compatibility for historic argv_array interface */
+#define argv_array strvec
+#define ARGV_ARRAY_INIT STRVEC_INIT
+#define argv_array_init strvec_init
+#define argv_array_push strvec_push
+#define argv_array_pushf strvec_pushf
+#define argv_array_pushl strvec_pushl
+#define argv_array_pushv strvec_pushv
+#define argv_array_pop strvec_pop
+#define argv_array_split strvec_split
+#define argv_array_clear strvec_clear
+#define argv_array_detach strvec_detach
#endif /* ARGV_ARRAY_H */
#ifndef GIT_EXEC_CMD_H
#define GIT_EXEC_CMD_H
-struct argv_array;
+struct strvec;
void git_set_exec_path(const char *exec_path);
void git_resolve_executable_dir(const char *path);
const char *git_exec_path(void);
void setup_path(void);
-const char **prepare_git_cmd(struct argv_array *out, const char **argv);
+const char **prepare_git_cmd(struct strvec *out, const char **argv);
int execv_git_cmd(const char **argv); /* NULL terminated */
LAST_ARG_MUST_BE_NULL
int execl_git_cmd(const char *cmd, ...);
#define LS_REFS_H
struct repository;
-struct argv_array;
+struct strvec;
struct packet_reader;
-int ls_refs(struct repository *r, struct argv_array *keys,
+int ls_refs(struct repository *r, struct strvec *keys,
struct packet_reader *request);
#endif /* LS_REFS_H */
* still modify arg in place, but unlike sq_dequote_to_argv, the argv_array
* will duplicate and take ownership of the strings.
*/
-struct argv_array;
-int sq_dequote_to_argv_array(char *arg, struct argv_array *);
+struct strvec;
+int sq_dequote_to_argv_array(char *arg, struct strvec *);
int unquote_c_style(struct strbuf *, const char *quoted, const char **endp);
size_t quote_c_style(const char *name, struct strbuf *, FILE *, int no_dq);
* Given a 'prefix' expand it by the rules in 'ref_rev_parse_rules' and add
* the results to 'prefixes'
*/
-struct argv_array;
-void expand_ref_prefix(struct argv_array *prefixes, const char *prefix);
+struct strvec;
+void expand_ref_prefix(struct strvec *prefixes, const char *prefix);
int expand_ref(struct repository *r, const char *str, int len, struct object_id *oid, char **ref);
int repo_dwim_ref(struct repository *r, const char *str, int len, struct object_id *oid, char **ref);
int valid_fetch_refspec(const char *refspec);
-struct argv_array;
+struct strvec;
/*
* Determine what <prefix> values to pass to the peer in ref-prefix lines
* (see Documentation/technical/protocol-v2.txt).
*/
void refspec_ref_prefixes(const struct refspec *rs,
- struct argv_array *ref_prefixes);
+ struct strvec *ref_prefixes);
#endif /* REFSPEC_H */
struct oid_array;
struct packet_reader;
-struct argv_array;
+struct strvec;
struct string_list;
struct ref **get_remote_heads(struct packet_reader *reader,
struct ref **list, unsigned int flags,
/* Used for protocol v2 in order to retrieve refs from a remote */
struct ref **get_remote_refs(int fd_out, struct packet_reader *reader,
struct ref **list, int for_push,
- const struct argv_array *ref_prefixes,
+ const struct strvec *ref_prefixes,
const struct string_list *server_options,
int stateless_rpc);
#ifndef SERVE_H
#define SERVE_H
-struct argv_array;
-int has_capability(const struct argv_array *keys, const char *capability,
+struct strvec;
+int has_capability(const struct strvec *keys, const char *capability,
const char **value);
struct serve_options {
#ifndef SUBMODULE_H
#define SUBMODULE_H
-struct argv_array;
+struct strvec;
struct cache_entry;
struct diff_options;
struct index_state;
const struct submodule *submodule_from_ce(const struct cache_entry *ce);
void check_for_new_submodule_commits(struct object_id *oid);
int fetch_populated_submodules(struct repository *r,
- const struct argv_array *options,
+ const struct strvec *options,
const char *prefix,
int command_line_option,
int default_option,
* a submodule by clearing any repo-specific environment variables, but
* retaining any config in the environment.
*/
-void prepare_submodule_repo_env(struct argv_array *out);
+void prepare_submodule_repo_env(struct strvec *out);
#define ABSORB_GITDIR_RECURSE_SUBMODULES (1<<0)
void absorb_git_dir_into_superproject(const char *path,
struct ref;
struct transport;
-struct argv_array;
+struct strvec;
struct transport_vtable {
/**
void upload_pack(struct upload_pack_options *options);
struct repository;
-struct argv_array;
+struct strvec;
struct packet_reader;
-int upload_pack_v2(struct repository *r, struct argv_array *keys,
+int upload_pack_v2(struct repository *r, struct strvec *keys,
struct packet_reader *request);
struct strbuf;