summaryrefslogtreecommitdiff
path: root/libbb/xfuncs.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbb/xfuncs.c')
-rw-r--r--libbb/xfuncs.c57
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
208int wait_nohang(int *wstat)
209{
210 return waitpid(-1, wstat, WNOHANG);
211}
212
213int 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
223void sig_block(int sig)
224{
225 sigset_t ss;
226 sigemptyset(&ss);
227 sigaddset(&ss, sig);
228 sigprocmask(SIG_BLOCK, &ss, NULL);
229}
230
231void 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
240void sig_blocknone(void)
241{
242 sigset_t ss;
243 sigemptyset(&ss);
244 sigprocmask(SIG_SETMASK, &ss, NULL);
245}
246#endif
247
248void 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
257void sig_pause(void)
258{
259 sigset_t ss;
260 sigemptyset(&ss);
261 sigsuspend(&ss);
262}
263
264
208void xsetenv(const char *key, const char *value) 265void xsetenv(const char *key, const char *value)
209{ 266{
210 if (setenv(key, value, 1)) 267 if (setenv(key, value, 1))