Introduce trivial new pager.c helper infrastructure
This introduces the new function void setup_pager(void); to set up output to be written through a pager applocation. All in preparation for doing the simple scripts in C. Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>maint
							parent
							
								
									a4a88b2bab
								
							
						
					
					
						commit
						f67b45f862
					
				
							
								
								
									
										2
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										2
									
								
								Makefile
								
								
								
								
							|  | @ -205,7 +205,7 @@ LIB_OBJS = \ | |||
| 	quote.o read-cache.o refs.o run-command.o \ | ||||
| 	server-info.o setup.o sha1_file.o sha1_name.o strbuf.o \ | ||||
| 	tag.o tree.o usage.o config.o environment.o ctype.o copy.o \ | ||||
| 	fetch-clone.o revision.o \ | ||||
| 	fetch-clone.o revision.o pager.o \ | ||||
| 	$(DIFF_OBJS) | ||||
|  | ||||
| LIBS = $(LIB_FILE) | ||||
|  |  | |||
							
								
								
									
										3
									
								
								cache.h
								
								
								
								
							
							
						
						
									
										3
									
								
								cache.h
								
								
								
								
							|  | @ -352,4 +352,7 @@ extern int copy_fd(int ifd, int ofd); | |||
| extern int receive_unpack_pack(int fd[2], const char *me, int quiet); | ||||
| extern int receive_keep_pack(int fd[2], const char *me, int quiet); | ||||
|  | ||||
| /* pager.c */ | ||||
| extern void setup_pager(void); | ||||
|  | ||||
| #endif /* CACHE_H */ | ||||
|  |  | |||
|  | @ -0,0 +1,48 @@ | |||
| #include "cache.h" | ||||
|  | ||||
| /* | ||||
|  * This is split up from the rest of git so that we might do | ||||
|  * something different on Windows, for example. | ||||
|  */ | ||||
|  | ||||
| static void run_pager(void) | ||||
| { | ||||
| 	const char *prog = getenv("PAGER"); | ||||
| 	if (!prog) | ||||
| 		prog = "less"; | ||||
| 	setenv("LESS", "-S", 0); | ||||
| 	execlp(prog, prog, NULL); | ||||
| } | ||||
|  | ||||
| void setup_pager(void) | ||||
| { | ||||
| 	pid_t pid; | ||||
| 	int fd[2]; | ||||
|  | ||||
| 	if (!isatty(1)) | ||||
| 		return; | ||||
| 	if (pipe(fd) < 0) | ||||
| 		return; | ||||
| 	pid = fork(); | ||||
| 	if (pid < 0) { | ||||
| 		close(fd[0]); | ||||
| 		close(fd[1]); | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	/* return in the child */ | ||||
| 	if (!pid) { | ||||
| 		dup2(fd[1], 1); | ||||
| 		close(fd[0]); | ||||
| 		close(fd[1]); | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	/* The original process turns into the PAGER */ | ||||
| 	dup2(fd[0], 0); | ||||
| 	close(fd[0]); | ||||
| 	close(fd[1]); | ||||
|  | ||||
| 	run_pager(); | ||||
| 	exit(255); | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	 Linus Torvalds
						Linus Torvalds