NOFORK fixes
"rm -i FILE" and "yes" can now be interrupted by ^C in hush. This also now works: $ usleep 19999999 ^C $ echo $? 130 function old new delta run_pipe 1668 1711 +43 pseudo_exec_argv 312 321 +9 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 52/0) Total: 52 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
@@ -16,7 +16,8 @@
|
||||
//config: help
|
||||
//config: rm is used to remove files or directories.
|
||||
|
||||
//applet:IF_RM(APPLET_NOFORK(rm, rm, BB_DIR_BIN, BB_SUID_DROP, rm))
|
||||
//applet:IF_RM(APPLET_NOEXEC(rm, rm, BB_DIR_BIN, BB_SUID_DROP, rm))
|
||||
/* was NOFORK, but then "rm -i FILE" can't be ^C'ed if run by hush */
|
||||
|
||||
//kbuild:lib-$(CONFIG_RM) += rm.o
|
||||
|
||||
@@ -36,7 +37,7 @@
|
||||
|
||||
#include "libbb.h"
|
||||
|
||||
/* This is a NOFORK applet. Be very careful! */
|
||||
/* This is a NOEXEC applet. Be very careful! */
|
||||
|
||||
int rm_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
||||
int rm_main(int argc UNUSED_PARAM, char **argv)
|
||||
|
@@ -12,7 +12,8 @@
|
||||
//config: help
|
||||
//config: print a sequence of numbers
|
||||
|
||||
//applet:IF_SEQ(APPLET_NOFORK(seq, seq, BB_DIR_USR_BIN, BB_SUID_DROP, seq))
|
||||
//applet:IF_SEQ(APPLET_NOEXEC(seq, seq, BB_DIR_USR_BIN, BB_SUID_DROP, seq))
|
||||
/* was NOFORK, but then "seq 1 999999999" can't be ^C'ed if run by hush */
|
||||
|
||||
//kbuild:lib-$(CONFIG_SEQ) += seq.o
|
||||
|
||||
@@ -26,7 +27,7 @@
|
||||
|
||||
#include "libbb.h"
|
||||
|
||||
/* This is a NOFORK applet. Be very careful! */
|
||||
/* This is a NOEXEC applet. Be very careful! */
|
||||
|
||||
int seq_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
||||
int seq_main(int argc, char **argv)
|
||||
|
@@ -38,6 +38,13 @@ int usleep_main(int argc UNUSED_PARAM, char **argv)
|
||||
bb_show_usage();
|
||||
}
|
||||
|
||||
/* Safe wrt NOFORK? (noforks are not allowed to run for
|
||||
* a long time). Try "usleep 99999999" + ^C + "echo $?"
|
||||
* in hush with FEATURE_SH_NOFORK=y.
|
||||
* At least on uclibc, usleep() thanslates to nanosleep()
|
||||
* which returns early on any signal (even caught one),
|
||||
* and uclibc does not loop back on EINTR.
|
||||
*/
|
||||
usleep(xatou(argv[1]));
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
|
@@ -17,7 +17,8 @@
|
||||
//config: yes is used to repeatedly output a specific string, or
|
||||
//config: the default string 'y'.
|
||||
|
||||
//applet:IF_YES(APPLET_NOFORK(yes, yes, BB_DIR_USR_BIN, BB_SUID_DROP, yes))
|
||||
//applet:IF_YES(APPLET_NOEXEC(yes, yes, BB_DIR_USR_BIN, BB_SUID_DROP, yes))
|
||||
/* was NOFORK, but then yes can't be ^C'ed if run by hush */
|
||||
|
||||
//kbuild:lib-$(CONFIG_YES) += yes.o
|
||||
|
||||
|
Reference in New Issue
Block a user