|  | @@ -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 {
 |