diff options
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); } |