From 335b63d8d1876ce4e172ebcc9d64544785682244 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Tue, 10 Apr 2007 21:38:30 +0000 Subject: 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 --- libbb/fflush_stdout_and_exit.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'libbb/fflush_stdout_and_exit.c') 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 @@ #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); } -- cgit v1.2.3