summaryrefslogtreecommitdiff
path: root/libbb/fflush_stdout_and_exit.c
diff options
context:
space:
mode:
authorDenis Vlasenko2007-04-10 21:38:30 +0000
committerDenis Vlasenko2007-04-10 21:38:30 +0000
commit335b63d8d1876ce4e172ebcc9d64544785682244 (patch)
tree14183fd728ce51ae10baee70f7d8f72c39d30649 /libbb/fflush_stdout_and_exit.c
parent07c394e69b0cfa7cd30e97ffc6edb0d857905f45 (diff)
downloadbusybox-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.c14
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);
}