diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-04-10 21:38:30 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-04-10 21:38:30 +0000 |
commit | 335b63d8d1876ce4e172ebcc9d64544785682244 (patch) | |
tree | 14183fd728ce51ae10baee70f7d8f72c39d30649 /libbb/fflush_stdout_and_exit.c | |
parent | 07c394e69b0cfa7cd30e97ffc6edb0d857905f45 (diff) | |
download | busybox-w32-335b63d8d1876ce4e172ebcc9d64544785682244.tar.gz busybox-w32-335b63d8d1876ce4e172ebcc9d64544785682244.tar.bz2 busybox-w32-335b63d8d1876ce4e172ebcc9d64544785682244.zip |
make a few struct bb_applet members conditional
rename sllep_and_die -> xfunc_die
make fflush_stdout_and_exit NOFORK-safe
fix some buglets found by randomconfig
Diffstat (limited to 'libbb/fflush_stdout_and_exit.c')
-rw-r--r-- | libbb/fflush_stdout_and_exit.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/libbb/fflush_stdout_and_exit.c b/libbb/fflush_stdout_and_exit.c index ae68222b4..d79827f45 100644 --- a/libbb/fflush_stdout_and_exit.c +++ b/libbb/fflush_stdout_and_exit.c | |||
@@ -13,13 +13,17 @@ | |||
13 | 13 | ||
14 | #include "libbb.h" | 14 | #include "libbb.h" |
15 | 15 | ||
16 | // TODO: make it safe to call from NOFORK applets | ||
17 | // Currently, it can exit(0). Even if it is made to do longjmp trick | ||
18 | // (see sleep_and_die internals), zero cannot be passed thru this way! | ||
19 | |||
20 | void fflush_stdout_and_exit(int retval) | 16 | void fflush_stdout_and_exit(int retval) |
21 | { | 17 | { |
22 | if (fflush(stdout)) | 18 | if (fflush(stdout)) |
23 | sleep_and_die(); | 19 | xfunc_die(); |
20 | |||
21 | if (ENABLE_FEATURE_EXEC_PREFER_APPLETS && die_sleep < 0) { | ||
22 | /* We are in NOFORK applet. Do not exit() directly, | ||
23 | * but use xfunc_die() */ | ||
24 | xfunc_error_retval = retval; | ||
25 | xfunc_die(); | ||
26 | } | ||
27 | |||
24 | exit(retval); | 28 | exit(retval); |
25 | } | 29 | } |