ash: optional sleep builtin
No binary (build failed)
—
(log yok)
| @@ -37,6 +37,7 @@ | |
| //applet:IF_SLEEP(APPLET(sleep, BB_DIR_BIN, BB_SUID_DROP)) | |
| //kbuild:lib-$(CONFIG_SLEEP) += sleep.o | |
| + | //kbuild:lib-$(CONFIG_ASH_SLEEP) += sleep.o |
| /* BB_AUDIT SUSv3 compliant */ | |
| /* BB_AUDIT GNU issues -- fancy version matches except args must be ints. */ | |
| @@ -1510,6 +1510,7 @@ int ash_main(int argc, char** argv) IF_SHELL_ASH(MAIN_EXTERNALLY_VISIBLE); | |
| 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); |
| 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 | |
| @@ -76,6 +76,12 @@ void FAST_FUNC sleep_for_duration(duration_t duration) | |
| ts.tv_sec = duration; | |
| ts.tv_nsec = (duration - ts.tv_sec) * 1000000000; | |
| } | |
| + | /* NB: if ENABLE_ASH_SLEEP, we end up here if "sleep N" |
| + | * is run in ash. ^C will still work, because ash's signal handler |
| + | * does not return (it longjumps), the below loop |
| + | * will not continue looping. |
| + | * (This wouldn't work in hush) |
| + | */ |
| do { | |
| errno = 0; | |
| nanosleep(&ts, &ts); | |
| @@ -134,6 +134,11 @@ | |
| //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_HELP | |
| //config: bool "help builtin" | |
| //config: default y | |
| @@ -10155,6 +10160,9 @@ static int FAST_FUNC printfcmd(int argc, char **argv) { return printf_main(argc, | |
| #if ENABLE_ASH_TEST || BASH_TEST2 | |
| static int FAST_FUNC testcmd(int argc, char **argv) { return test_main(argc, argv); } | |
| #endif | |
| + | #if ENABLE_ASH_SLEEP |
| + | static int FAST_FUNC sleepcmd(int argc, char **argv) { return sleep_main(argc, argv); } |
| + | #endif |
| /* Keep these in proper order since it is searched via bsearch() */ | |
| static const struct builtincmd builtintab[] = { | |
| @@ -10217,6 +10225,9 @@ static const struct builtincmd builtintab[] = { | |
| { BUILTIN_SPEC_REG "return" , returncmd }, | |
| { BUILTIN_SPEC_REG "set" , setcmd }, | |
| { BUILTIN_SPEC_REG "shift" , shiftcmd }, | |
| + | #if ENABLE_ASH_SLEEP |
| + | { BUILTIN_REGULAR "sleep" , sleepcmd }, |
| + | #endif |
| #if BASH_SOURCE | |
| { BUILTIN_SPEC_REG "source" , dotcmd }, | |
| #endif | |