git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] remote-curl: use argv_array in parse_push()
@ 2019-10-13 13:37 René Scharfe
  0 siblings, 0 replies; only message in thread
From: René Scharfe @ 2019-10-13 13:37 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Junio C Hamano

Use argv_array to build an array of strings instead of open-coding it.
This simplifies the code a bit.

We also need to make the specs parameter of push(), push_dav() and
push_git() const to match the argv member of the argv_array.  That's
fine, as all three only actually read from the specs array anyway.

Signed-off-by: René Scharfe <l.s.r@web.de>
---
 remote-curl.c | 22 +++++++++-------------
 1 file changed, 9 insertions(+), 13 deletions(-)

diff --git a/remote-curl.c b/remote-curl.c
index 051f26629d..1612e7f52d 100644
--- a/remote-curl.c
+++ b/remote-curl.c
@@ -1154,7 +1154,7 @@ static void parse_fetch(struct strbuf *buf)
 	strbuf_reset(buf);
 }

-static int push_dav(int nr_spec, char **specs)
+static int push_dav(int nr_spec, const char **specs)
 {
 	struct child_process child = CHILD_PROCESS_INIT;
 	size_t i;
@@ -1175,7 +1175,7 @@ static int push_dav(int nr_spec, char **specs)
 	return 0;
 }

-static int push_git(struct discovery *heads, int nr_spec, char **specs)
+static int push_git(struct discovery *heads, int nr_spec, const char **specs)
 {
 	struct rpc_state rpc;
 	int i, err;
@@ -1225,7 +1225,7 @@ static int push_git(struct discovery *heads, int nr_spec, char **specs)
 	return err;
 }

-static int push(int nr_spec, char **specs)
+static int push(int nr_spec, const char **specs)
 {
 	struct discovery *heads = discover_refs("git-receive-pack", 1);
 	int ret;
@@ -1240,14 +1240,12 @@ static int push(int nr_spec, char **specs)

 static void parse_push(struct strbuf *buf)
 {
-	char **specs = NULL;
-	int alloc_spec = 0, nr_spec = 0, i, ret;
+	struct argv_array specs = ARGV_ARRAY_INIT;
+	int ret;

 	do {
-		if (starts_with(buf->buf, "push ")) {
-			ALLOC_GROW(specs, nr_spec + 1, alloc_spec);
-			specs[nr_spec++] = xstrdup(buf->buf + 5);
-		}
+		if (starts_with(buf->buf, "push "))
+			argv_array_push(&specs, buf->buf + 5);
 		else
 			die(_("http transport does not support %s"), buf->buf);

@@ -1258,7 +1256,7 @@ static void parse_push(struct strbuf *buf)
 			break;
 	} while (1);

-	ret = push(nr_spec, specs);
+	ret = push(specs.argc, specs.argv);
 	printf("\n");
 	fflush(stdout);

@@ -1266,9 +1264,7 @@ static void parse_push(struct strbuf *buf)
 		exit(128); /* error already reported */

  free_specs:
-	for (i = 0; i < nr_spec; i++)
-		free(specs[i]);
-	free(specs);
+	argv_array_clear(&specs);
 }

 static int stateless_connect(const char *service_name)
--
2.23.0

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2019-10-13 13:39 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-10-13 13:37 [PATCH] remote-curl: use argv_array in parse_push() René Scharfe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).