From ae049c955c8858899467f6c5c0259c48a5294385 Mon Sep 17 00:00:00 2001 From: Jeff King Date: Sat, 19 Apr 2014 15:17:25 -0400 Subject: run_external_diff: use an argv_array for the environment We currently use static buffers and a static array for formatting the environment passed to the external diff. There's nothing wrong in the code, but it is much easier to verify that it is correct if we use a dynamic argv_array. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- diff.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) (limited to 'diff.c') diff --git a/diff.c b/diff.c index 76ae37903..c7b433ffc 100644 --- a/diff.c +++ b/diff.c @@ -2908,11 +2908,9 @@ static void run_external_diff(const char *pgm, struct diff_options *o) { struct argv_array argv = ARGV_ARRAY_INIT; + struct argv_array env = ARGV_ARRAY_INIT; int retval; struct diff_queue_struct *q = &diff_queued_diff; - const char *env[3] = { NULL }; - char env_counter[50]; - char env_total[50]; if (one && two) { struct diff_tempfile *temp_one, *temp_two; @@ -2937,15 +2935,13 @@ static void run_external_diff(const char *pgm, } fflush(NULL); - env[0] = env_counter; - snprintf(env_counter, sizeof(env_counter), "GIT_DIFF_PATH_COUNTER=%d", - ++o->diff_path_counter); - env[1] = env_total; - snprintf(env_total, sizeof(env_total), "GIT_DIFF_PATH_TOTAL=%d", q->nr); + argv_array_pushf(&env, "GIT_DIFF_PATH_COUNTER=%d", ++o->diff_path_counter); + argv_array_pushf(&env, "GIT_DIFF_PATH_TOTAL=%d", q->nr); - retval = run_command_v_opt_cd_env(argv.argv, RUN_USING_SHELL, NULL, env); + retval = run_command_v_opt_cd_env(argv.argv, RUN_USING_SHELL, NULL, env.argv); remove_tempfile(); argv_array_clear(&argv); + argv_array_clear(&env); if (retval) { fprintf(stderr, "external diff died, stopping at %s.\n", name); exit(1); -- cgit v1.2.1