X-Git-Url: https://jasonwoof.com/gitweb/?p=dwm.git;a=blobdiff_plain;f=util.c;h=9da8f52b58cb01f5515758372c3f57023f405286;hp=c0f248961241cb285381591b8e3f479e05d0dfc3;hb=83d23908d3438d7f1f62533a7c8d96fc1019df55;hpb=16c67f32d62849792c8e6d4fdec22a1896f9c279 diff --git a/util.c b/util.c index c0f2489..9da8f52 100644 --- a/util.c +++ b/util.c @@ -13,8 +13,6 @@ #include "util.h" -static char *shell = NULL; - void error(char *errstr, ...) { va_list ap; @@ -84,21 +82,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); @@ -107,15 +101,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) { @@ -130,8 +121,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 { @@ -143,7 +134,7 @@ pipe_spawn(char *buf, unsigned int len, Display *dpy, const char *cmd) n += l; } close(pfd[0]); - buf[n - 1] = 0; + buf[n < len ? n : len - 1] = 0; } wait(0); }