summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2014-04-19 19:17:25 (GMT)
committerJunio C Hamano <gitster@pobox.com>2014-04-21 17:30:33 (GMT)
commitae049c955c8858899467f6c5c0259c48a5294385 (patch)
tree37ff06375ab15e51dd7b283ee7f18363018a2670
parent82fbf269b9994d172719b2d456db5ef8453b323d (diff)
downloadgit-ae049c955c8858899467f6c5c0259c48a5294385.zip
git-ae049c955c8858899467f6c5c0259c48a5294385.tar.gz
git-ae049c955c8858899467f6c5c0259c48a5294385.tar.bz2
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 <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--diff.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/diff.c b/diff.c
index 76ae379..c7b433f 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);