Refactor git_set_argv0_path() to git_extract_argv0_path()
This commit moves the code that computes the dirname of argv[0]
from git.c's main() to git_set_argv0_path() and renames the function
to git_extract_argv0_path().  This makes the code in git.c's main
less cluttered, and we can use the dirname computation from other
main() functions too.
[ spr:
 - split Steve's original commit and wrote new commit message.
 - Integrated Johannes Schindelin's
   cca1704897 while rebasing onto master.
]
Signed-off-by: Steve Haslam <shaslam@lastminute.com>
Signed-off-by: Steffen Prohaska <prohaska@zib.de>
Acked-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
			
			
				maint
			
			
		
							parent
							
								
									026fa0d5ad
								
							
						
					
					
						commit
						4dd47c3b86
					
				
							
								
								
									
										14
									
								
								exec_cmd.c
								
								
								
								
							
							
						
						
									
										14
									
								
								exec_cmd.c
								
								
								
								
							|  | @ -20,9 +20,19 @@ const char *system_path(const char *path) | |||
| 	return path; | ||||
| } | ||||
|  | ||||
| void git_set_argv0_path(const char *path) | ||||
| const char *git_extract_argv0_path(const char *argv0) | ||||
| { | ||||
| 	argv0_path = path; | ||||
| 	const char *slash = argv0 + strlen(argv0); | ||||
|  | ||||
| 	while (argv0 <= slash && !is_dir_sep(*slash)) | ||||
| 		slash--; | ||||
|  | ||||
| 	if (slash >= argv0) { | ||||
| 		argv0_path = xstrndup(argv0, slash - argv0); | ||||
| 		return slash + 1; | ||||
| 	} | ||||
|  | ||||
| 	return argv0; | ||||
| } | ||||
|  | ||||
| void git_set_argv_exec_path(const char *exec_path) | ||||
|  |  | |||
|  | @ -2,8 +2,8 @@ | |||
| #define GIT_EXEC_CMD_H | ||||
|  | ||||
| extern void git_set_argv_exec_path(const char *exec_path); | ||||
| extern void git_set_argv0_path(const char *path); | ||||
| extern const char* git_exec_path(void); | ||||
| 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(const char **argv); | ||||
| extern int execv_git_cmd(const char **argv); /* NULL terminated */ | ||||
|  |  | |||
							
								
								
									
										19
									
								
								git.c
								
								
								
								
							
							
						
						
									
										19
									
								
								git.c
								
								
								
								
							|  | @ -442,21 +442,12 @@ static int run_argv(int *argcp, const char ***argv) | |||
|  | ||||
| int main(int argc, const char **argv) | ||||
| { | ||||
| 	const char *cmd = argv[0] && *argv[0] ? argv[0] : "git-help"; | ||||
| 	char *slash = (char *)cmd + strlen(cmd); | ||||
| 	const char *cmd; | ||||
|  | ||||
| 	/* | ||||
| 	 * Take the basename of argv[0] as the command | ||||
| 	 * name, and the dirname as the default exec_path | ||||
| 	 * if we don't have anything better. | ||||
| 	 */ | ||||
| 	while (cmd <= slash && !is_dir_sep(*slash)) | ||||
| 		slash--; | ||||
| 	if (cmd <= slash) { | ||||
| 		*slash++ = 0; | ||||
| 		git_set_argv0_path(cmd); | ||||
| 		cmd = slash; | ||||
| 	} | ||||
| 	if (argv[0] && *argv[0]) | ||||
| 		cmd = git_extract_argv0_path(argv[0]); | ||||
| 	else | ||||
| 		cmd = "git-help"; | ||||
|  | ||||
| 	/* | ||||
| 	 * "git-xxxx" is the same as "git xxxx", but we obviously: | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Steve Haslam
						Steve Haslam