diff options
author | Denis Vlasenko | 2007-04-10 21:38:30 +0000 |
---|---|---|
committer | Denis Vlasenko | 2007-04-10 21:38:30 +0000 |
commit | 335b63d8d1876ce4e172ebcc9d64544785682244 (patch) | |
tree | 14183fd728ce51ae10baee70f7d8f72c39d30649 /libbb/fflush_stdout_and_exit.c | |
parent | 07c394e69b0cfa7cd30e97ffc6edb0d857905f45 (diff) | |
download | busybox-335b63d8d1876ce4e172ebcc9d64544785682244.zip busybox-335b63d8d1876ce4e172ebcc9d64544785682244.tar.gz |
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 ae68222..d79827f 100644 --- a/libbb/fflush_stdout_and_exit.c +++ b/libbb/fflush_stdout_and_exit.c @@ -13,13 +13,17 @@ #include "libbb.h" -// TODO: make it safe to call from NOFORK applets -// Currently, it can exit(0). Even if it is made to do longjmp trick -// (see sleep_and_die internals), zero cannot be passed thru this way! - void fflush_stdout_and_exit(int retval) { if (fflush(stdout)) - sleep_and_die(); + xfunc_die(); + + if (ENABLE_FEATURE_EXEC_PREFER_APPLETS && die_sleep < 0) { + /* We are in NOFORK applet. Do not exit() directly, + * but use xfunc_die() */ + xfunc_error_retval = retval; + xfunc_die(); + } + exit(retval); } |