Mercurial > dwm-meillo
comparison util.c @ 14:5c078b66347b
added bar event timer
author | Anselm R. Garbe <garbeam@wmii.de> |
---|---|
date | Tue, 11 Jul 2006 18:15:11 +0200 |
parents | ea9c08ec4b48 |
children | 00d4d52b231f |
comparison
equal
deleted
inserted
replaced
13:5cc5e55a132d | 14:5c078b66347b |
---|---|
11 #include <sys/wait.h> | 11 #include <sys/wait.h> |
12 #include <unistd.h> | 12 #include <unistd.h> |
13 #include <X11/Xatom.h> | 13 #include <X11/Xatom.h> |
14 | 14 |
15 #include "util.h" | 15 #include "util.h" |
16 | |
17 static char *shell = NULL; | |
18 | 16 |
19 void | 17 void |
20 error(char *errstr, ...) { | 18 error(char *errstr, ...) { |
21 va_list ap; | 19 va_list ap; |
22 va_start(ap, errstr); | 20 va_start(ap, errstr); |
83 *p1 = *p2; | 81 *p1 = *p2; |
84 *p2 = tmp; | 82 *p2 = tmp; |
85 } | 83 } |
86 | 84 |
87 void | 85 void |
88 spawn(Display *dpy, const char *cmd) | 86 spawn(Display *dpy, char *argv[]) |
89 { | 87 { |
90 if(!shell && !(shell = getenv("SHELL"))) | 88 if(!argv || !argv[0]) |
91 shell = "/bin/sh"; | |
92 | |
93 if(!cmd) | |
94 return; | 89 return; |
95 if(fork() == 0) { | 90 if(fork() == 0) { |
96 if(fork() == 0) { | 91 if(fork() == 0) { |
97 if(dpy) | 92 if(dpy) |
98 close(ConnectionNumber(dpy)); | 93 close(ConnectionNumber(dpy)); |
99 setsid(); | 94 setsid(); |
100 fprintf(stderr, "gridwm: execlp %s %s -c %s", shell, shell, cmd); | 95 execvp(argv[0], argv); |
101 execlp(shell, shell, "-c", cmd, NULL); | 96 fprintf(stderr, "gridwm: execvp %s", argv[0]); |
102 fprintf(stderr, "gridwm: execlp %s", cmd); | |
103 perror(" failed"); | 97 perror(" failed"); |
104 } | 98 } |
105 exit (0); | 99 exit (0); |
106 } | 100 } |
107 wait(0); | 101 wait(0); |
108 } | 102 } |
109 | 103 |
110 void | 104 void |
111 pipe_spawn(char *buf, unsigned int len, Display *dpy, const char *cmd) | 105 pipe_spawn(char *buf, unsigned int len, Display *dpy, char *argv[]) |
112 { | 106 { |
113 unsigned int l, n; | 107 unsigned int l, n; |
114 int pfd[2]; | 108 int pfd[2]; |
115 | 109 |
116 if(!shell && !(shell = getenv("SHELL"))) | 110 if(!argv || !argv[0]) |
117 shell = "/bin/sh"; | |
118 | |
119 if(!cmd) | |
120 return; | 111 return; |
121 | 112 |
122 if(pipe(pfd) == -1) { | 113 if(pipe(pfd) == -1) { |
123 perror("pipe"); | 114 perror("pipe"); |
124 exit(1); | 115 exit(1); |
129 close(ConnectionNumber(dpy)); | 120 close(ConnectionNumber(dpy)); |
130 setsid(); | 121 setsid(); |
131 dup2(pfd[1], STDOUT_FILENO); | 122 dup2(pfd[1], STDOUT_FILENO); |
132 close(pfd[0]); | 123 close(pfd[0]); |
133 close(pfd[1]); | 124 close(pfd[1]); |
134 execlp(shell, shell, "-c", cmd, NULL); | 125 execvp(argv[0], argv); |
135 fprintf(stderr, "gridwm: execlp %s", cmd); | 126 fprintf(stderr, "gridwm: execvp %s", argv[0]); |
136 perror(" failed"); | 127 perror(" failed"); |
137 } | 128 } |
138 else { | 129 else { |
139 n = 0; | 130 n = 0; |
140 close(pfd[1]); | 131 close(pfd[1]); |