diff options
Diffstat (limited to 'libbb/xfuncs.c')
-rw-r--r-- | libbb/xfuncs.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index 68ad3dec4..b08f92d81 100644 --- a/libbb/xfuncs.c +++ b/libbb/xfuncs.c | |||
@@ -205,6 +205,63 @@ int wait4pid(int pid) | |||
205 | return 0; | 205 | return 0; |
206 | } | 206 | } |
207 | 207 | ||
208 | int wait_nohang(int *wstat) | ||
209 | { | ||
210 | return waitpid(-1, wstat, WNOHANG); | ||
211 | } | ||
212 | |||
213 | int wait_pid(int *wstat, int pid) | ||
214 | { | ||
215 | int r; | ||
216 | |||
217 | do | ||
218 | r = waitpid(pid, wstat, 0); | ||
219 | while ((r == -1) && (errno == EINTR)); | ||
220 | return r; | ||
221 | } | ||
222 | |||
223 | void sig_block(int sig) | ||
224 | { | ||
225 | sigset_t ss; | ||
226 | sigemptyset(&ss); | ||
227 | sigaddset(&ss, sig); | ||
228 | sigprocmask(SIG_BLOCK, &ss, NULL); | ||
229 | } | ||
230 | |||
231 | void sig_unblock(int sig) | ||
232 | { | ||
233 | sigset_t ss; | ||
234 | sigemptyset(&ss); | ||
235 | sigaddset(&ss, sig); | ||
236 | sigprocmask(SIG_UNBLOCK, &ss, NULL); | ||
237 | } | ||
238 | |||
239 | #if 0 | ||
240 | void sig_blocknone(void) | ||
241 | { | ||
242 | sigset_t ss; | ||
243 | sigemptyset(&ss); | ||
244 | sigprocmask(SIG_SETMASK, &ss, NULL); | ||
245 | } | ||
246 | #endif | ||
247 | |||
248 | void sig_catch(int sig, void (*f)(int)) | ||
249 | { | ||
250 | struct sigaction sa; | ||
251 | sa.sa_handler = f; | ||
252 | sa.sa_flags = 0; | ||
253 | sigemptyset(&sa.sa_mask); | ||
254 | sigaction(sig, &sa, NULL); | ||
255 | } | ||
256 | |||
257 | void sig_pause(void) | ||
258 | { | ||
259 | sigset_t ss; | ||
260 | sigemptyset(&ss); | ||
261 | sigsuspend(&ss); | ||
262 | } | ||
263 | |||
264 | |||
208 | void xsetenv(const char *key, const char *value) | 265 | void xsetenv(const char *key, const char *value) |
209 | { | 266 | { |
210 | if (setenv(key, value, 1)) | 267 | if (setenv(key, value, 1)) |