diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-11-23 13:11:42 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-11-23 13:11:42 +0000 |
commit | 835068637e81771a1b45b9faf04a31830f0e5d8a (patch) | |
tree | da354be6bcbfe767926ea6375164a6f34ba66599 | |
parent | f962a0354e2426ef9781df97e4b02b32e438783c (diff) | |
download | busybox-w32-835068637e81771a1b45b9faf04a31830f0e5d8a.tar.gz busybox-w32-835068637e81771a1b45b9faf04a31830f0e5d8a.tar.bz2 busybox-w32-835068637e81771a1b45b9faf04a31830f0e5d8a.zip |
hush: implement test builtin
-rw-r--r-- | shell/hush.c | 59 |
1 files changed, 38 insertions, 21 deletions
diff --git a/shell/hush.c b/shell/hush.c index 5c641904c..04afbfd9a 100644 --- a/shell/hush.c +++ b/shell/hush.c | |||
@@ -489,27 +489,6 @@ static void syntax_lineno(int line) | |||
489 | #endif | 489 | #endif |
490 | 490 | ||
491 | /* Index of subroutines: */ | 491 | /* Index of subroutines: */ |
492 | /* function prototypes for builtins */ | ||
493 | static int builtin_cd(char **argv); | ||
494 | static int builtin_eval(char **argv); | ||
495 | static int builtin_exec(char **argv); | ||
496 | static int builtin_exit(char **argv); | ||
497 | static int builtin_export(char **argv); | ||
498 | #if ENABLE_HUSH_JOB | ||
499 | static int builtin_fg_bg(char **argv); | ||
500 | static int builtin_jobs(char **argv); | ||
501 | #endif | ||
502 | #if ENABLE_HUSH_HELP | ||
503 | static int builtin_help(char **argv); | ||
504 | #endif | ||
505 | static int builtin_pwd(char **argv); | ||
506 | static int builtin_read(char **argv); | ||
507 | static int builtin_set(char **argv); | ||
508 | static int builtin_shift(char **argv); | ||
509 | static int builtin_source(char **argv); | ||
510 | static int builtin_umask(char **argv); | ||
511 | static int builtin_unset(char **argv); | ||
512 | //static int builtin_not_written(char **argv); | ||
513 | /* o_string manipulation: */ | 492 | /* o_string manipulation: */ |
514 | static int b_check_space(o_string *o, int len); | 493 | static int b_check_space(o_string *o, int len); |
515 | static int b_addchr(o_string *o, int ch); | 494 | static int b_addchr(o_string *o, int ch); |
@@ -633,6 +612,29 @@ static void free_strings(char **strings) | |||
633 | } | 612 | } |
634 | 613 | ||
635 | 614 | ||
615 | /* Function prototypes for builtins */ | ||
616 | static int builtin_cd(char **argv); | ||
617 | static int builtin_eval(char **argv); | ||
618 | static int builtin_exec(char **argv); | ||
619 | static int builtin_exit(char **argv); | ||
620 | static int builtin_export(char **argv); | ||
621 | #if ENABLE_HUSH_JOB | ||
622 | static int builtin_fg_bg(char **argv); | ||
623 | static int builtin_jobs(char **argv); | ||
624 | #endif | ||
625 | #if ENABLE_HUSH_HELP | ||
626 | static int builtin_help(char **argv); | ||
627 | #endif | ||
628 | static int builtin_pwd(char **argv); | ||
629 | static int builtin_read(char **argv); | ||
630 | static int builtin_test(char **argv); | ||
631 | static int builtin_set(char **argv); | ||
632 | static int builtin_shift(char **argv); | ||
633 | static int builtin_source(char **argv); | ||
634 | static int builtin_umask(char **argv); | ||
635 | static int builtin_unset(char **argv); | ||
636 | //static int builtin_not_written(char **argv); | ||
637 | |||
636 | /* Table of built-in functions. They can be forked or not, depending on | 638 | /* Table of built-in functions. They can be forked or not, depending on |
637 | * context: within pipes, they fork. As simple commands, they do not. | 639 | * context: within pipes, they fork. As simple commands, they do not. |
638 | * When used in non-forking context, they can change global variables | 640 | * When used in non-forking context, they can change global variables |
@@ -651,6 +653,8 @@ struct built_in_command { | |||
651 | }; | 653 | }; |
652 | 654 | ||
653 | static const struct built_in_command bltins[] = { | 655 | static const struct built_in_command bltins[] = { |
656 | BLTIN("[" , builtin_test, "Test condition"), | ||
657 | BLTIN("[[" , builtin_test, "Test condition"), | ||
654 | #if ENABLE_HUSH_JOB | 658 | #if ENABLE_HUSH_JOB |
655 | BLTIN("bg" , builtin_fg_bg, "Resume a job in the background"), | 659 | BLTIN("bg" , builtin_fg_bg, "Resume a job in the background"), |
656 | #endif | 660 | #endif |
@@ -672,6 +676,7 @@ static const struct built_in_command bltins[] = { | |||
672 | BLTIN("set" , builtin_set, "Set/unset shell local variables"), | 676 | BLTIN("set" , builtin_set, "Set/unset shell local variables"), |
673 | BLTIN("shift" , builtin_shift, "Shift positional parameters"), | 677 | BLTIN("shift" , builtin_shift, "Shift positional parameters"), |
674 | // BLTIN("trap" , builtin_not_written, "Trap signals"), | 678 | // BLTIN("trap" , builtin_not_written, "Trap signals"), |
679 | BLTIN("test" , builtin_test, "Test condition"), | ||
675 | // BLTIN("ulimit", builtin_not_written, "Controls resource limits"), | 680 | // BLTIN("ulimit", builtin_not_written, "Controls resource limits"), |
676 | BLTIN("umask" , builtin_umask, "Sets file creation mask"), | 681 | BLTIN("umask" , builtin_umask, "Sets file creation mask"), |
677 | BLTIN("unset" , builtin_unset, "Unset environment variable"), | 682 | BLTIN("unset" , builtin_unset, "Unset environment variable"), |
@@ -824,6 +829,18 @@ static const char *set_cwd(void) | |||
824 | return cwd; | 829 | return cwd; |
825 | } | 830 | } |
826 | 831 | ||
832 | |||
833 | /* built-in 'test' handler */ | ||
834 | static int builtin_test(char **argv) | ||
835 | { | ||
836 | int argc = 0; | ||
837 | while (*argv) { | ||
838 | argc++; | ||
839 | argv++; | ||
840 | } | ||
841 | return test_main(argc, argv - argc); | ||
842 | } | ||
843 | |||
827 | /* built-in 'eval' handler */ | 844 | /* built-in 'eval' handler */ |
828 | static int builtin_eval(char **argv) | 845 | static int builtin_eval(char **argv) |
829 | { | 846 | { |