| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -14,8 +14,6 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include "util.h" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static char *shell = NULL; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					error(char *errstr, ...) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						va_list ap; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -85,21 +83,17 @@ swap(void **p1, void **p2) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					spawn(Display *dpy, const char *cmd) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					spawn(Display *dpy, char *argv[]) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(!shell && !(shell = getenv("SHELL"))) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							shell = "/bin/sh"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(!cmd) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(!argv || !argv[0]) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							return; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(fork() == 0) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if(fork() == 0) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								if(dpy) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
									close(ConnectionNumber(dpy)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								setsid(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								fprintf(stderr, "gridwm: execlp %s %s -c %s", shell, shell, cmd); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								execlp(shell, shell, "-c", cmd, NULL); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								fprintf(stderr, "gridwm: execlp %s", cmd); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								execvp(argv[0], argv); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								fprintf(stderr, "gridwm: execvp %s", argv[0]); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								perror(" failed"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							exit (0); | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -108,15 +102,12 @@ spawn(Display *dpy, const char *cmd) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					void | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					pipe_spawn(char *buf, unsigned int len, Display *dpy, const char *cmd) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					pipe_spawn(char *buf, unsigned int len, Display *dpy, char *argv[]) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						unsigned int l, n; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						int pfd[2]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(!shell && !(shell = getenv("SHELL"))) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							shell = "/bin/sh"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(!cmd) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(!argv || !argv[0]) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							return; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						if(pipe(pfd) == -1) { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -131,8 +122,8 @@ pipe_spawn(char *buf, unsigned int len, Display *dpy, const char *cmd) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							dup2(pfd[1], STDOUT_FILENO); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							close(pfd[0]); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							close(pfd[1]); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							execlp(shell, shell, "-c", cmd, NULL); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							fprintf(stderr, "gridwm: execlp %s", cmd); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							execvp(argv[0], argv); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							fprintf(stderr, "gridwm: execvp %s", argv[0]); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							perror(" failed"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						else { | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |