Squashed 'third_party/git/' content from commit cb71568594
git-subtree-dir: third_party/git git-subtree-split: cb715685942260375e1eb8153b0768a376e4ece7
This commit is contained in:
		
						commit
						1b593e1ea4
					
				
					 3629 changed files with 1139935 additions and 0 deletions
				
			
		
							
								
								
									
										57
									
								
								common-main.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								common-main.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,57 @@ | |||
| #include "cache.h" | ||||
| #include "exec-cmd.h" | ||||
| #include "attr.h" | ||||
| 
 | ||||
| /*
 | ||||
|  * Many parts of Git have subprograms communicate via pipe, expect the | ||||
|  * upstream of a pipe to die with SIGPIPE when the downstream of a | ||||
|  * pipe does not need to read all that is written.  Some third-party | ||||
|  * programs that ignore or block SIGPIPE for their own reason forget | ||||
|  * to restore SIGPIPE handling to the default before spawning Git and | ||||
|  * break this carefully orchestrated machinery. | ||||
|  * | ||||
|  * Restore the way SIGPIPE is handled to default, which is what we | ||||
|  * expect. | ||||
|  */ | ||||
| static void restore_sigpipe_to_default(void) | ||||
| { | ||||
| 	sigset_t unblock; | ||||
| 
 | ||||
| 	sigemptyset(&unblock); | ||||
| 	sigaddset(&unblock, SIGPIPE); | ||||
| 	sigprocmask(SIG_UNBLOCK, &unblock, NULL); | ||||
| 	signal(SIGPIPE, SIG_DFL); | ||||
| } | ||||
| 
 | ||||
| int main(int argc, const char **argv) | ||||
| { | ||||
| 	int result; | ||||
| 
 | ||||
| 	trace2_initialize_clock(); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Always open file descriptors 0/1/2 to avoid clobbering files | ||||
| 	 * in die().  It also avoids messing up when the pipes are dup'ed | ||||
| 	 * onto stdin/stdout/stderr in the child processes we spawn. | ||||
| 	 */ | ||||
| 	sanitize_stdfds(); | ||||
| 	restore_sigpipe_to_default(); | ||||
| 
 | ||||
| 	git_resolve_executable_dir(argv[0]); | ||||
| 
 | ||||
| 	trace2_initialize(); | ||||
| 	trace2_cmd_start(argv); | ||||
| 	trace2_collect_process_info(TRACE2_PROCESS_INFO_STARTUP); | ||||
| 
 | ||||
| 	git_setup_gettext(); | ||||
| 
 | ||||
| 	initialize_the_repository(); | ||||
| 
 | ||||
| 	attr_start(); | ||||
| 
 | ||||
| 	result = cmd_main(argc, argv); | ||||
| 
 | ||||
| 	trace2_cmd_exit(result); | ||||
| 
 | ||||
| 	return result; | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue