diff options
| author | Jason Hobbs <jason.hobbs@calxeda.com> | 2011-08-31 05:37:24 +0000 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2011-10-17 22:25:34 +0200 | 
| commit | c8a2079e49ee15dde10278865425ec9c36215f31 (patch) | |
| tree | 61d9221a40d78ed3d6d618b63f6d0985bdea6fb4 /common/main.c | |
| parent | b41bc5a82d8a67d347f2fc12cf2106b8a37e4336 (diff) | |
| download | olio-uboot-2014.01-c8a2079e49ee15dde10278865425ec9c36215f31.tar.xz olio-uboot-2014.01-c8a2079e49ee15dde10278865425ec9c36215f31.zip | |
common: add run_command2 for running simple or hush commands
Signed-off-by: Jason Hobbs <jason.hobbs@calxeda.com>
Cc: Mike Frysinger <vapier@gentoo.org>
Acked-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'common/main.c')
| -rw-r--r-- | common/main.c | 56 | 
1 files changed, 27 insertions, 29 deletions
| diff --git a/common/main.c b/common/main.c index b97d89e58..3adadfdaa 100644 --- a/common/main.c +++ b/common/main.c @@ -83,8 +83,7 @@ extern void mdm_init(void); /* defined in board.c */  /***************************************************************************   * Watch for 'delay' seconds for autoboot stop or autoboot delay string. - * returns: 0 -  no key string, allow autoboot - *          1 - got key string, abort + * returns: 0 -  no key string, allow autoboot 1 - got key string, abort   */  #if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)  # if defined(CONFIG_AUTOBOOT_KEYED) @@ -266,6 +265,26 @@ int abortboot(int bootdelay)  # endif	/* CONFIG_AUTOBOOT_KEYED */  #endif	/* CONFIG_BOOTDELAY >= 0  */ +/* + * Return 0 on success, or != 0 on error. + */ +static inline +int run_command2(const char *cmd, int flag) +{ +#ifndef CONFIG_SYS_HUSH_PARSER +	/* +	 * run_command can return 0 or 1 for success, so clean up its result. +	 */ +	if (run_command(cmd, flag) == -1) +		return 1; + +	return 0; +#else +	return parse_string_outer(cmd, +			FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP); +#endif +} +  /****************************************************************************/  void main_loop (void) @@ -332,12 +351,7 @@ void main_loop (void)  		int prev = disable_ctrlc(1);	/* disable Control C checking */  # endif -# ifndef CONFIG_SYS_HUSH_PARSER -		run_command (p, 0); -# else -		parse_string_outer(p, FLAG_PARSE_SEMICOLON | -				    FLAG_EXIT_FROM_LOOP); -# endif +		run_command2(p, 0);  # ifdef CONFIG_AUTOBOOT_KEYED  		disable_ctrlc(prev);	/* restore Control C checking */ @@ -382,12 +396,7 @@ void main_loop (void)  		int prev = disable_ctrlc(1);	/* disable Control C checking */  # endif -# ifndef CONFIG_SYS_HUSH_PARSER -		run_command (s, 0); -# else -		parse_string_outer(s, FLAG_PARSE_SEMICOLON | -				    FLAG_EXIT_FROM_LOOP); -# endif +		run_command2(s, 0);  # ifdef CONFIG_AUTOBOOT_KEYED  		disable_ctrlc(prev);	/* restore Control C checking */ @@ -397,14 +406,8 @@ void main_loop (void)  # ifdef CONFIG_MENUKEY  	if (menukey == CONFIG_MENUKEY) {  		s = getenv("menucmd"); -		if (s) { -# ifndef CONFIG_SYS_HUSH_PARSER -			run_command(s, 0); -# else -			parse_string_outer(s, FLAG_PARSE_SEMICOLON | -						FLAG_EXIT_FROM_LOOP); -# endif -		} +		if (s) +			run_command2(s, 0);  	}  #endif /* CONFIG_MENUKEY */  #endif /* CONFIG_BOOTDELAY */ @@ -1403,14 +1406,9 @@ int do_run (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])  			printf ("## Error: \"%s\" not defined\n", argv[i]);  			return 1;  		} -#ifndef CONFIG_SYS_HUSH_PARSER -		if (run_command (arg, flag) == -1) -			return 1; -#else -		if (parse_string_outer(arg, -		    FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP) != 0) + +		if (run_command2(arg, flag) != 0)  			return 1; -#endif  	}  	return 0;  } |