git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 5/5] run_hook(): allow more than 9 hook arguments

From
Stephan Beyer <s-beyer@gmx.net>
Date
Jan 17, 2009, 03:02 UTC
Message-ID
<1232161375-24503-1-git-send-email-s-beyer@gmx.net>
In-Reply-To
<1232133002-21725-4-git-send-email-s-beyer@gmx.net>
This is done using the ALLOC_GROW macro.
Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
---
	Ok, Dscho :-)
	The interdiff based on [PATCH 5/5] is...
	--- a/run-command.c
	+++ b/run-command.c
	@@ -350,14 +350,14 @@ int run_hook(const char *index_file, const char *name, ...)
		char index[PATH_MAX];
		va_list args;
		int ret;
	-	size_t i = 1, alloc = 5;
	+	size_t i = 0, alloc = 0;
	 
		if (access(git_path("hooks/%s", name), X_OK) < 0)
			return 0;
	 
		va_start(args, name);
	-	argv = xmalloc(alloc * sizeof(const char *));
	-	argv[0] = git_path("hooks/%s", name);
	+	ALLOC_GROW(argv, i + 1, alloc);
	+	argv[i++] = git_path("hooks/%s", name);
		while (argv[i-1]) {
			ALLOC_GROW(argv, i + 1, alloc);
			argv[i++] = va_arg(args, const char *);
 Documentation/technical/api-run-command.txt |    2 +-
 run-command.c                               |   18 +++++++++---------
 2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/Documentation/technical/api-run-command.txt b/Documentation/technical/api-run-command.txt
index 13e7b63..2efe7a4 100644
--- a/Documentation/technical/api-run-command.txt
+++ b/Documentation/technical/api-run-command.txt
@@ -58,7 +58,7 @@ Functions
 	The first argument is a pathname to an index file, or NULL
 	if the hook uses the default index file or no index is needed.
 	The second argument is the name of the hook.
-	The further arguments (up to 9) correspond to the hook arguments.
+	The further arguments correspond to the hook arguments.
 	The last argument has to be NULL to terminate the arguments list.
 	If the hook does not exist or is not executable, the return
 	value will be zero.
diff --git a/run-command.c b/run-command.c
index fc54c07..d2f1262 100644
--- a/run-command.c
+++ b/run-command.c
@@ -346,23 +346,22 @@ int finish_async(struct async *async)
 int run_hook(const char *index_file, const char *name, ...)
 {
 	struct child_process hook;
-	const char *argv[10], *env[2];
+	const char **argv, *env[2];
 	char index[PATH_MAX];
 	va_list args;
 	int ret;
-	int i;
+	size_t i = 0, alloc = 0;
 
 	if (access(git_path("hooks/%s", name), X_OK) < 0)
 		return 0;
 
 	va_start(args, name);
-	argv[0] = git_path("hooks/%s", name);
-	i = 0;
-	do {
-		if (++i >= ARRAY_SIZE(argv))
-			die("run_hook(): too many arguments");
-		argv[i] = va_arg(args, const char *);
-	} while (argv[i]);
+	ALLOC_GROW(argv, i + 1, alloc);
+	argv[i++] = git_path("hooks/%s", name);
+	while (argv[i-1]) {
+		ALLOC_GROW(argv, i + 1, alloc);
+		argv[i++] = va_arg(args, const char *);
+	}
 	va_end(args);
 
 	memset(&hook, 0, sizeof(hook));
@@ -377,6 +376,7 @@ int run_hook(const char *index_file, const char *name, ...)
 	}
 
 	ret = start_command(&hook);
+	free(argv);
 	if (ret) {
 		warning("Could not spawn %s", argv[0]);
 		return ret;
-- 
1.6.1.160.gecdb
Previous: Johannes SchindelinNext: Junio C Hamano
Message 14 of 17 in “Move run_hook() from builtin-commit.c into run-command.c (libgit)”
  1. 1/2 Move run_hook() from builtin-commit.c into run-command.c (libgit)Stephan Beyer, Jan 15, 2009
  2. 2/2 api-run-command.txt: talk about run_hook()Stephan Beyer, Jan 15, 2009
  3. Jakub NarebskiJan 15, 2009
  4. Miklos VajnaJan 15, 2009
  5. Johannes SchindelinJan 15, 2009
  6. Junio C HamanoJan 15, 2009
  7. Stephan BeyerJan 16, 2009
  8. 1/5 checkout: don't crash on file checkout before running post-checkout hookStephan Beyer, Jan 16, 2009
  9. 2/5 Move run_hook() from builtin-commit.c into run-command.c (libgit)Stephan Beyer, Jan 16, 2009
  10. 3/5 api-run-command.txt: talk about run_hook()Stephan Beyer, Jan 16, 2009
  11. 4/5 run_hook(): check the executability of the hook before filling argvStephan Beyer, Jan 16, 2009
  12. 5/5 run_hook(): allow more than 9 hook argumentsStephan Beyer, Jan 16, 2009
  13. Johannes SchindelinJan 16, 2009
  14. 5/5 run_hook(): allow more than 9 hook argumentsStephan Beyer, Jan 17, 2009
  15. Junio C HamanoJan 18, 2009
  16. Stephan BeyerJan 18, 2009
  17. Johannes SchindelinJan 16, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.