ash: disable sleep as builtin, closes 15619
Has a few annoying problems: * sleepcmd() -> sleep_main(), the parsing of bad arguments exits the shell. * sleep_for_duration() in sleep_main() has to be interruptible for ^C traps to work, which may be a problem for other users of sleep_for_duration(). * BUT, if sleep_for_duration() is interruptible, then SIGCHLD interrupts it as well (try "/bin/sleep 1 & sleep 10"). * sleep_main() must not allocate anything as ^C in ash longjmp's. (currently, allocations are only on error paths, in message printing). Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
6ce1dc2e91
commit
5e0411a7fb
2 changed files with 19 additions and 5 deletions
|
@ -1513,6 +1513,8 @@ int hush_main(int argc, char** argv) IF_SHELL_HUSH(MAIN_EXTERNALLY_VISIBLE);
|
|||
/* If shell needs them, they exist even if not enabled as applets */
|
||||
int echo_main(int argc, char** argv) IF_ECHO(MAIN_EXTERNALLY_VISIBLE);
|
||||
int sleep_main(int argc, char **argv) IF_SLEEP(MAIN_EXTERNALLY_VISIBLE);
|
||||
/* See disabled "config ASH_SLEEP" in ash.c */
|
||||
#define ENABLE_ASH_SLEEP 0
|
||||
int printf_main(int argc, char **argv) IF_PRINTF(MAIN_EXTERNALLY_VISIBLE);
|
||||
int test_main(int argc, char **argv)
|
||||
#if ENABLE_TEST || ENABLE_TEST1 || ENABLE_TEST2
|
||||
|
|
22
shell/ash.c
22
shell/ash.c
|
@ -134,11 +134,23 @@
|
|||
//config: default y
|
||||
//config: depends on SHELL_ASH
|
||||
//config:
|
||||
//config:config ASH_SLEEP
|
||||
//config: bool "sleep builtin"
|
||||
//config: default y
|
||||
//config: depends on SHELL_ASH
|
||||
//config:
|
||||
//
|
||||
////config:config ASH_SLEEP
|
||||
////config: bool "sleep builtin"
|
||||
////config: default y
|
||||
////config: depends on SHELL_ASH
|
||||
////config:
|
||||
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
//Disabled for now. Has a few annoying problems:
|
||||
// * sleepcmd() -> sleep_main(), the parsing of bad arguments exits the shell.
|
||||
// * sleep_for_duration() in sleep_main() has to be interruptible for
|
||||
// ^C traps to work, which may be a problem for other users
|
||||
// of sleep_for_duration().
|
||||
// * BUT, if sleep_for_duration() is interruptible, then SIGCHLD interrupts it
|
||||
// as well (try "/bin/sleep 1 & sleep 10").
|
||||
// * sleep_main() must not allocate anything as ^C in ash longjmp's.
|
||||
// (currently, allocations are only on error paths, in message printing).
|
||||
//
|
||||
//config:config ASH_HELP
|
||||
//config: bool "help builtin"
|
||||
//config: default y
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue