diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-04-01 01:18:20 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-04-01 01:18:20 +0000 |
commit | 2856dab4770e521a87c18b04ae8ebc209a9b95f9 (patch) | |
tree | d4f6495339702c0b6d79816d0bb07ba4b6679ce8 /libbb/xfuncs.c | |
parent | f443bffd3c24c4b7fcbc0472c75e747e26c24fef (diff) | |
download | busybox-w32-2856dab4770e521a87c18b04ae8ebc209a9b95f9.tar.gz busybox-w32-2856dab4770e521a87c18b04ae8ebc209a9b95f9.tar.bz2 busybox-w32-2856dab4770e521a87c18b04ae8ebc209a9b95f9.zip |
tcpsvd: new applet
It's a GPL-ed 'clone' of Dan Bernstein's tcpserver.
Author: Gerrit Pape <pape@smarden.org>
http://smarden.sunsite.dk/ipsvd/
size tcpsvd.o
text data bss dec hex filename
2571 4 16 2591 a1f tcpsvd.o
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)) |