diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-03-26 13:20:04 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-03-26 13:20:04 +0000 |
commit | bb7fcb4229fd5ff583039f26ca1c06340e3f09ea (patch) | |
tree | 5e4a6cc92e42ff7694ffc8b6a91434640e953726 /libbb/xfuncs.c | |
parent | f62c6fa1cae0f944243c57b0a776c29eb0c61f18 (diff) | |
download | busybox-w32-bb7fcb4229fd5ff583039f26ca1c06340e3f09ea.tar.gz busybox-w32-bb7fcb4229fd5ff583039f26ca1c06340e3f09ea.tar.bz2 busybox-w32-bb7fcb4229fd5ff583039f26ca1c06340e3f09ea.zip |
libbb: rework NOMMU helper API so that it makes more sense
and easier to use. Doesn't compile - need two more commits.
Diffstat (limited to 'libbb/xfuncs.c')
-rw-r--r-- | libbb/xfuncs.c | 78 |
1 files changed, 0 insertions, 78 deletions
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index 1dcdbc065..14bd62a15 100644 --- a/libbb/xfuncs.c +++ b/libbb/xfuncs.c | |||
@@ -187,43 +187,6 @@ void xfflush_stdout(void) | |||
187 | } | 187 | } |
188 | } | 188 | } |
189 | 189 | ||
190 | // This does a fork/exec in one call, using vfork(). Return PID of new child, | ||
191 | // -1 for failure. Runs argv[0], searching path if that has no / in it. | ||
192 | pid_t spawn(char **argv) | ||
193 | { | ||
194 | /* Why static? */ | ||
195 | static int failed; | ||
196 | pid_t pid; | ||
197 | |||
198 | // Be nice to nommu machines. | ||
199 | failed = 0; | ||
200 | pid = vfork(); | ||
201 | if (pid < 0) return pid; | ||
202 | if (!pid) { | ||
203 | BB_EXECVP(argv[0], argv); | ||
204 | |||
205 | // We're sharing a stack with blocked parent, let parent know we failed | ||
206 | // and then exit to unblock parent (but don't run atexit() stuff, which | ||
207 | // would screw up parent.) | ||
208 | |||
209 | failed = errno; | ||
210 | _exit(0); | ||
211 | } | ||
212 | if (failed) { | ||
213 | errno = failed; | ||
214 | return -1; | ||
215 | } | ||
216 | return pid; | ||
217 | } | ||
218 | |||
219 | // Die with an error message if we can't spawn a child process. | ||
220 | pid_t xspawn(char **argv) | ||
221 | { | ||
222 | pid_t pid = spawn(argv); | ||
223 | if (pid < 0) bb_perror_msg_and_die("%s", *argv); | ||
224 | return pid; | ||
225 | } | ||
226 | |||
227 | // Wait for the specified child PID to exit, returning child's error return. | 190 | // Wait for the specified child PID to exit, returning child's error return. |
228 | int wait4pid(int pid) | 191 | int wait4pid(int pid) |
229 | { | 192 | { |
@@ -510,47 +473,6 @@ DIR *xopendir(const char *path) | |||
510 | return dp; | 473 | return dp; |
511 | } | 474 | } |
512 | 475 | ||
513 | #ifndef BB_NOMMU | ||
514 | // Die with an error message if we can't daemonize. | ||
515 | void xdaemon(int nochdir, int noclose) | ||
516 | { | ||
517 | if (daemon(nochdir, noclose)) | ||
518 | bb_perror_msg_and_die("daemon"); | ||
519 | } | ||
520 | #endif | ||
521 | |||
522 | void bb_sanitize_stdio_maybe_daemonize(int daemonize) | ||
523 | { | ||
524 | int fd; | ||
525 | /* Mega-paranoid */ | ||
526 | fd = xopen(bb_dev_null, O_RDWR); | ||
527 | while ((unsigned)fd < 2) | ||
528 | fd = dup(fd); /* have 0,1,2 open at least to /dev/null */ | ||
529 | if (daemonize) { | ||
530 | pid_t pid = fork(); | ||
531 | if (pid < 0) /* wtf? */ | ||
532 | bb_perror_msg_and_die("fork"); | ||
533 | if (pid) /* parent */ | ||
534 | exit(0); | ||
535 | /* child */ | ||
536 | /* if daemonizing, make sure we detach from stdio */ | ||
537 | setsid(); | ||
538 | dup2(fd, 0); | ||
539 | dup2(fd, 1); | ||
540 | dup2(fd, 2); | ||
541 | } | ||
542 | while (fd > 2) | ||
543 | close(fd--); /* close everything after fd#2 */ | ||
544 | } | ||
545 | void bb_sanitize_stdio(void) | ||
546 | { | ||
547 | bb_sanitize_stdio_maybe_daemonize(0); | ||
548 | } | ||
549 | void bb_daemonize(void) | ||
550 | { | ||
551 | bb_sanitize_stdio_maybe_daemonize(1); | ||
552 | } | ||
553 | |||
554 | // Die with an error message if we can't open a new socket. | 476 | // Die with an error message if we can't open a new socket. |
555 | int xsocket(int domain, int type, int protocol) | 477 | int xsocket(int domain, int type, int protocol) |
556 | { | 478 | { |