equal
deleted
inserted
replaced
9 #include <string.h> |
9 #include <string.h> |
10 #include <sys/types.h> |
10 #include <sys/types.h> |
11 #include <sys/wait.h> |
11 #include <sys/wait.h> |
12 #include <unistd.h> |
12 #include <unistd.h> |
13 |
13 |
14 #include "util.h" |
14 #include "wm.h" |
15 |
15 |
16 void |
16 void |
17 error(char *errstr, ...) { |
17 error(char *errstr, ...) { |
18 va_list ap; |
18 va_list ap; |
19 va_start(ap, errstr); |
19 va_start(ap, errstr); |
58 } |
58 } |
59 |
59 |
60 char * |
60 char * |
61 estrdup(const char *str) |
61 estrdup(const char *str) |
62 { |
62 { |
63 void *res = strdup(str); |
63 char *res = strdup(str); |
64 if(!res) |
64 if(!res) |
65 bad_malloc(strlen(str)); |
65 bad_malloc(strlen(str)); |
66 return res; |
66 return res; |
67 } |
|
68 |
|
69 void |
|
70 failed_assert(char *a, char *file, int line) |
|
71 { |
|
72 fprintf(stderr, "Assertion \"%s\" failed at %s:%d\n", a, file, line); |
|
73 abort(); |
|
74 } |
67 } |
75 |
68 |
76 void |
69 void |
77 swap(void **p1, void **p2) |
70 swap(void **p1, void **p2) |
78 { |
71 { |
97 } |
90 } |
98 exit (0); |
91 exit (0); |
99 } |
92 } |
100 wait(0); |
93 wait(0); |
101 } |
94 } |
102 |
|
103 void |
|
104 pipe_spawn(char *buf, unsigned int len, Display *dpy, char *argv[]) |
|
105 { |
|
106 unsigned int l, n; |
|
107 int pfd[2]; |
|
108 |
|
109 if(!argv || !argv[0]) |
|
110 return; |
|
111 |
|
112 if(pipe(pfd) == -1) { |
|
113 perror("pipe"); |
|
114 exit(1); |
|
115 } |
|
116 |
|
117 if(fork() == 0) { |
|
118 if(dpy) |
|
119 close(ConnectionNumber(dpy)); |
|
120 setsid(); |
|
121 dup2(pfd[1], STDOUT_FILENO); |
|
122 close(pfd[0]); |
|
123 close(pfd[1]); |
|
124 execvp(argv[0], argv); |
|
125 fprintf(stderr, "gridwm: execvp %s", argv[0]); |
|
126 perror(" failed"); |
|
127 } |
|
128 else { |
|
129 l = n = 0; |
|
130 close(pfd[1]); |
|
131 while(n < len) { |
|
132 if((l = read(pfd[0], buf + n, len - n)) < 1) |
|
133 break; |
|
134 n += l; |
|
135 } |
|
136 while(l > n); |
|
137 close(pfd[0]); |
|
138 buf[n < len ? n : len - 1] = 0; |
|
139 } |
|
140 wait(0); |
|
141 } |
|