ash: optional sleep builtin
function old new delta sleepcmd - 10 +10 builtintab 352 360 +8 .rodata 105264 105271 +7 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 2/0 up/down: 25/0) Total: 25 bytes Signed-off-by: Shawn Landden <shawnlandden@tutanota.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
d432049f28
commit
58598eb709
@ -37,6 +37,7 @@
|
|||||||
//applet:IF_SLEEP(APPLET(sleep, BB_DIR_BIN, BB_SUID_DROP))
|
//applet:IF_SLEEP(APPLET(sleep, BB_DIR_BIN, BB_SUID_DROP))
|
||||||
|
|
||||||
//kbuild:lib-$(CONFIG_SLEEP) += sleep.o
|
//kbuild:lib-$(CONFIG_SLEEP) += sleep.o
|
||||||
|
//kbuild:lib-$(CONFIG_ASH_SLEEP) += sleep.o
|
||||||
|
|
||||||
/* BB_AUDIT SUSv3 compliant */
|
/* BB_AUDIT SUSv3 compliant */
|
||||||
/* BB_AUDIT GNU issues -- fancy version matches except args must be ints. */
|
/* 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);
|
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 */
|
/* 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 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 printf_main(int argc, char **argv) IF_PRINTF(MAIN_EXTERNALLY_VISIBLE);
|
||||||
int test_main(int argc, char **argv)
|
int test_main(int argc, char **argv)
|
||||||
#if ENABLE_TEST || ENABLE_TEST1 || ENABLE_TEST2
|
#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_sec = duration;
|
||||||
ts.tv_nsec = (duration - ts.tv_sec) * 1000000000;
|
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 {
|
do {
|
||||||
errno = 0;
|
errno = 0;
|
||||||
nanosleep(&ts, &ts);
|
nanosleep(&ts, &ts);
|
||||||
|
11
shell/ash.c
11
shell/ash.c
@ -134,6 +134,11 @@
|
|||||||
//config: default y
|
//config: default y
|
||||||
//config: depends on SHELL_ASH
|
//config: depends on SHELL_ASH
|
||||||
//config:
|
//config:
|
||||||
|
//config:config ASH_SLEEP
|
||||||
|
//config: bool "sleep builtin"
|
||||||
|
//config: default y
|
||||||
|
//config: depends on SHELL_ASH
|
||||||
|
//config:
|
||||||
//config:config ASH_HELP
|
//config:config ASH_HELP
|
||||||
//config: bool "help builtin"
|
//config: bool "help builtin"
|
||||||
//config: default y
|
//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
|
#if ENABLE_ASH_TEST || BASH_TEST2
|
||||||
static int FAST_FUNC testcmd(int argc, char **argv) { return test_main(argc, argv); }
|
static int FAST_FUNC testcmd(int argc, char **argv) { return test_main(argc, argv); }
|
||||||
#endif
|
#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() */
|
/* Keep these in proper order since it is searched via bsearch() */
|
||||||
static const struct builtincmd builtintab[] = {
|
static const struct builtincmd builtintab[] = {
|
||||||
@ -10217,6 +10225,9 @@ static const struct builtincmd builtintab[] = {
|
|||||||
{ BUILTIN_SPEC_REG "return" , returncmd },
|
{ BUILTIN_SPEC_REG "return" , returncmd },
|
||||||
{ BUILTIN_SPEC_REG "set" , setcmd },
|
{ BUILTIN_SPEC_REG "set" , setcmd },
|
||||||
{ BUILTIN_SPEC_REG "shift" , shiftcmd },
|
{ BUILTIN_SPEC_REG "shift" , shiftcmd },
|
||||||
|
#if ENABLE_ASH_SLEEP
|
||||||
|
{ BUILTIN_REGULAR "sleep" , sleepcmd },
|
||||||
|
#endif
|
||||||
#if BASH_SOURCE
|
#if BASH_SOURCE
|
||||||
{ BUILTIN_SPEC_REG "source" , dotcmd },
|
{ BUILTIN_SPEC_REG "source" , dotcmd },
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user