aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-11-23 13:11:42 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-11-23 13:11:42 +0000
commit835068637e81771a1b45b9faf04a31830f0e5d8a (patch)
treeda354be6bcbfe767926ea6375164a6f34ba66599
parentf962a0354e2426ef9781df97e4b02b32e438783c (diff)
downloadbusybox-w32-835068637e81771a1b45b9faf04a31830f0e5d8a.tar.gz
busybox-w32-835068637e81771a1b45b9faf04a31830f0e5d8a.tar.bz2
busybox-w32-835068637e81771a1b45b9faf04a31830f0e5d8a.zip
hush: implement test builtin
-rw-r--r--shell/hush.c59
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 */
493static int builtin_cd(char **argv);
494static int builtin_eval(char **argv);
495static int builtin_exec(char **argv);
496static int builtin_exit(char **argv);
497static int builtin_export(char **argv);
498#if ENABLE_HUSH_JOB
499static int builtin_fg_bg(char **argv);
500static int builtin_jobs(char **argv);
501#endif
502#if ENABLE_HUSH_HELP
503static int builtin_help(char **argv);
504#endif
505static int builtin_pwd(char **argv);
506static int builtin_read(char **argv);
507static int builtin_set(char **argv);
508static int builtin_shift(char **argv);
509static int builtin_source(char **argv);
510static int builtin_umask(char **argv);
511static int builtin_unset(char **argv);
512//static int builtin_not_written(char **argv);
513/* o_string manipulation: */ 492/* o_string manipulation: */
514static int b_check_space(o_string *o, int len); 493static int b_check_space(o_string *o, int len);
515static int b_addchr(o_string *o, int ch); 494static 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 */
616static int builtin_cd(char **argv);
617static int builtin_eval(char **argv);
618static int builtin_exec(char **argv);
619static int builtin_exit(char **argv);
620static int builtin_export(char **argv);
621#if ENABLE_HUSH_JOB
622static int builtin_fg_bg(char **argv);
623static int builtin_jobs(char **argv);
624#endif
625#if ENABLE_HUSH_HELP
626static int builtin_help(char **argv);
627#endif
628static int builtin_pwd(char **argv);
629static int builtin_read(char **argv);
630static int builtin_test(char **argv);
631static int builtin_set(char **argv);
632static int builtin_shift(char **argv);
633static int builtin_source(char **argv);
634static int builtin_umask(char **argv);
635static 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
653static const struct built_in_command bltins[] = { 655static 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 */
834static 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 */
828static int builtin_eval(char **argv) 845static int builtin_eval(char **argv)
829{ 846{