 20574f551b
			
		
	
	20574f551b
	
	
	
		
			
			These functions transform an existing argv into one suitable for exec-ing or spawning via git or a shell. We can use an argv_array in each to avoid dealing with manual counting and allocation. This also makes the memory allocation more clear and fixes some leaks. In prepare_shell_cmd, we would sometimes allocate a new string with "$@" in it and sometimes not, meaning the caller could not correctly free it. On the non-Windows side, we are in a child process which will exec() or exit() immediately, so the leak isn't a big deal. On Windows, though, we use spawn() from the parent process, and leak a string for each shell command we run. On top of that, the Windows code did not free the allocated argv array at all (but does for the prepare_git_cmd case!). By switching both of these functions to write into an argv_array, we can consistently free the result as appropriate. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			17 lines
		
	
	
		
			547 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			17 lines
		
	
	
		
			547 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef GIT_EXEC_CMD_H
 | |
| #define GIT_EXEC_CMD_H
 | |
| 
 | |
| struct argv_array;
 | |
| 
 | |
| extern void git_set_argv_exec_path(const char *exec_path);
 | |
| extern const char *git_extract_argv0_path(const char *path);
 | |
| extern const char *git_exec_path(void);
 | |
| extern void setup_path(void);
 | |
| extern const char **prepare_git_cmd(struct argv_array *out, const char **argv);
 | |
| extern int execv_git_cmd(const char **argv); /* NULL terminated */
 | |
| LAST_ARG_MUST_BE_NULL
 | |
| extern int execl_git_cmd(const char *cmd, ...);
 | |
| extern char *system_path(const char *path);
 | |
| 
 | |
| #endif /* GIT_EXEC_CMD_H */
 |