aboutsummaryrefslogtreecommitdiff
path: root/coreutils
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2017-08-04 02:20:19 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2017-08-04 02:20:19 +0200
commitcf792a58abc4fc55d0622333d0eb17c6a80dc497 (patch)
treebd740050c3ac79b0db76bd29728dd4d29120ccc6 /coreutils
parent0a53eadea528673a813c5f9312b1f53130429f7c (diff)
downloadbusybox-w32-cf792a58abc4fc55d0622333d0eb17c6a80dc497.tar.gz
busybox-w32-cf792a58abc4fc55d0622333d0eb17c6a80dc497.tar.bz2
busybox-w32-cf792a58abc4fc55d0622333d0eb17c6a80dc497.zip
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>
Diffstat (limited to 'coreutils')
-rw-r--r--coreutils/rm.c5
-rw-r--r--coreutils/seq.c5
-rw-r--r--coreutils/usleep.c7
-rw-r--r--coreutils/yes.c3
4 files changed, 15 insertions, 5 deletions
diff --git a/coreutils/rm.c b/coreutils/rm.c
index cec34cb9d..158c69be5 100644
--- a/coreutils/rm.c
+++ b/coreutils/rm.c
@@ -16,7 +16,8 @@
16//config: help 16//config: help
17//config: rm is used to remove files or directories. 17//config: rm is used to remove files or directories.
18 18
19//applet:IF_RM(APPLET_NOFORK(rm, rm, BB_DIR_BIN, BB_SUID_DROP, rm)) 19//applet:IF_RM(APPLET_NOEXEC(rm, rm, BB_DIR_BIN, BB_SUID_DROP, rm))
20/* was NOFORK, but then "rm -i FILE" can't be ^C'ed if run by hush */
20 21
21//kbuild:lib-$(CONFIG_RM) += rm.o 22//kbuild:lib-$(CONFIG_RM) += rm.o
22 23
@@ -36,7 +37,7 @@
36 37
37#include "libbb.h" 38#include "libbb.h"
38 39
39/* This is a NOFORK applet. Be very careful! */ 40/* This is a NOEXEC applet. Be very careful! */
40 41
41int rm_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 42int rm_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
42int rm_main(int argc UNUSED_PARAM, char **argv) 43int rm_main(int argc UNUSED_PARAM, char **argv)
diff --git a/coreutils/seq.c b/coreutils/seq.c
index ed4946b05..d5c6451cd 100644
--- a/coreutils/seq.c
+++ b/coreutils/seq.c
@@ -12,7 +12,8 @@
12//config: help 12//config: help
13//config: print a sequence of numbers 13//config: print a sequence of numbers
14 14
15//applet:IF_SEQ(APPLET_NOFORK(seq, seq, BB_DIR_USR_BIN, BB_SUID_DROP, seq)) 15//applet:IF_SEQ(APPLET_NOEXEC(seq, seq, BB_DIR_USR_BIN, BB_SUID_DROP, seq))
16/* was NOFORK, but then "seq 1 999999999" can't be ^C'ed if run by hush */
16 17
17//kbuild:lib-$(CONFIG_SEQ) += seq.o 18//kbuild:lib-$(CONFIG_SEQ) += seq.o
18 19
@@ -26,7 +27,7 @@
26 27
27#include "libbb.h" 28#include "libbb.h"
28 29
29/* This is a NOFORK applet. Be very careful! */ 30/* This is a NOEXEC applet. Be very careful! */
30 31
31int seq_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 32int seq_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
32int seq_main(int argc, char **argv) 33int seq_main(int argc, char **argv)
diff --git a/coreutils/usleep.c b/coreutils/usleep.c
index 7bc30c2a2..e68bb4c4d 100644
--- a/coreutils/usleep.c
+++ b/coreutils/usleep.c
@@ -38,6 +38,13 @@ int usleep_main(int argc UNUSED_PARAM, char **argv)
38 bb_show_usage(); 38 bb_show_usage();
39 } 39 }
40 40
41 /* Safe wrt NOFORK? (noforks are not allowed to run for
42 * a long time). Try "usleep 99999999" + ^C + "echo $?"
43 * in hush with FEATURE_SH_NOFORK=y.
44 * At least on uclibc, usleep() thanslates to nanosleep()
45 * which returns early on any signal (even caught one),
46 * and uclibc does not loop back on EINTR.
47 */
41 usleep(xatou(argv[1])); 48 usleep(xatou(argv[1]));
42 49
43 return EXIT_SUCCESS; 50 return EXIT_SUCCESS;
diff --git a/coreutils/yes.c b/coreutils/yes.c
index 81d875589..6b863c3c9 100644
--- a/coreutils/yes.c
+++ b/coreutils/yes.c
@@ -17,7 +17,8 @@
17//config: yes is used to repeatedly output a specific string, or 17//config: yes is used to repeatedly output a specific string, or
18//config: the default string `y'. 18//config: the default string `y'.
19 19
20//applet:IF_YES(APPLET_NOFORK(yes, yes, BB_DIR_USR_BIN, BB_SUID_DROP, yes)) 20//applet:IF_YES(APPLET_NOEXEC(yes, yes, BB_DIR_USR_BIN, BB_SUID_DROP, yes))
21/* was NOFORK, but then yes can't be ^C'ed if run by hush */
21 22
22//kbuild:lib-$(CONFIG_YES) += yes.o 23//kbuild:lib-$(CONFIG_YES) += yes.o
23 24