16
16
#include "submodule.h"
17
17
#include "ll-merge.h"
18
18
#include "string-list.h"
19
+ #include "argv-array.h"
19
20
20
21
#ifdef NO_FAST_WORKING_DIRECTORY
21
22
#define FAST_WORKING_DIRECTORY 0
@@ -2894,9 +2895,8 @@ static void run_external_diff(const char *pgm,
2894
2895
int complete_rewrite ,
2895
2896
struct diff_options * o )
2896
2897
{
2897
- const char * spawn_arg [ 10 ] ;
2898
+ struct argv_array argv = ARGV_ARRAY_INIT ;
2898
2899
int retval ;
2899
- const char * * arg = & spawn_arg [0 ];
2900
2900
struct diff_queue_struct * q = & diff_queued_diff ;
2901
2901
const char * env [3 ] = { NULL };
2902
2902
char env_counter [50 ];
@@ -2907,23 +2907,22 @@ static void run_external_diff(const char *pgm,
2907
2907
const char * othername = (other ? other : name );
2908
2908
temp_one = prepare_temp_file (name , one );
2909
2909
temp_two = prepare_temp_file (othername , two );
2910
- * arg ++ = pgm ;
2911
- * arg ++ = name ;
2912
- * arg ++ = temp_one -> name ;
2913
- * arg ++ = temp_one -> hex ;
2914
- * arg ++ = temp_one -> mode ;
2915
- * arg ++ = temp_two -> name ;
2916
- * arg ++ = temp_two -> hex ;
2917
- * arg ++ = temp_two -> mode ;
2910
+ argv_array_push ( & argv , pgm ) ;
2911
+ argv_array_push ( & argv , name ) ;
2912
+ argv_array_push ( & argv , temp_one -> name ) ;
2913
+ argv_array_push ( & argv , temp_one -> hex ) ;
2914
+ argv_array_push ( & argv , temp_one -> mode ) ;
2915
+ argv_array_push ( & argv , temp_two -> name ) ;
2916
+ argv_array_push ( & argv , temp_two -> hex ) ;
2917
+ argv_array_push ( & argv , temp_two -> mode ) ;
2918
2918
if (other ) {
2919
- * arg ++ = other ;
2920
- * arg ++ = xfrm_msg ;
2919
+ argv_array_push ( & argv , other ) ;
2920
+ argv_array_push ( & argv , xfrm_msg ) ;
2921
2921
}
2922
2922
} else {
2923
- * arg ++ = pgm ;
2924
- * arg ++ = name ;
2923
+ argv_array_push ( & argv , pgm ) ;
2924
+ argv_array_push ( & argv , name ) ;
2925
2925
}
2926
- * arg = NULL ;
2927
2926
fflush (NULL );
2928
2927
2929
2928
env [0 ] = env_counter ;
@@ -2932,8 +2931,9 @@ static void run_external_diff(const char *pgm,
2932
2931
env [1 ] = env_total ;
2933
2932
snprintf (env_total , sizeof (env_total ), "GIT_DIFF_PATH_TOTAL=%d" , q -> nr );
2934
2933
2935
- retval = run_command_v_opt_cd_env (spawn_arg , RUN_USING_SHELL , NULL , env );
2934
+ retval = run_command_v_opt_cd_env (argv . argv , RUN_USING_SHELL , NULL , env );
2936
2935
remove_tempfile ();
2936
+ argv_array_clear (& argv );
2937
2937
if (retval ) {
2938
2938
fprintf (stderr , "external diff died, stopping at %s.\n" , name );
2939
2939
exit (1 );
0 commit comments