mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-30 03:28:16 +00:00 
			
		
		
		
	The run command treats each argument an an environment variable. It gets the value of each variable and executes it as a command. If an environment variable contains a newline and the hush cli is used, it is supposed to execute each line one after the other. Normally a newline signals to hush to exit - this is used in normal command line entry - after a command is entered we want to return to allow the user to enter the next one. But environment variables obviously need to execute to completion. Add a special case for the execution of environment variables which continues when a newline is seen, and add a few tests to check this behaviour. Note: it's not impossible that this may cause regressions in other areas. I can't think of a case but with any change of behaviour with limited test coverage there is always a risk. From what I can tell this behaviour has been around since at least U-Boot 2011.03, although this pre-dates sandbox and I have not tested it on real hardware. Reported-by: Wolfgang Denk <wd@denx.de> Signed-off-by: Simon Glass <sjg@chromium.org>
		
			
				
	
	
		
			28 lines
		
	
	
		
			737 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			737 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * (C) Copyright 2001
 | |
|  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 | |
|  *
 | |
|  * SPDX-License-Identifier:	GPL-2.0+
 | |
|  */
 | |
| 
 | |
| #ifndef _CLI_HUSH_H_
 | |
| #define _CLI_HUSH_H_
 | |
| 
 | |
| #define FLAG_EXIT_FROM_LOOP 1
 | |
| #define FLAG_PARSE_SEMICOLON (1 << 1)	  /* symbol ';' is special for parser */
 | |
| #define FLAG_REPARSING       (1 << 2)	  /* >=2nd pass */
 | |
| #define FLAG_CONT_ON_NEWLINE (1 << 3)	  /* continue when we see \n */
 | |
| 
 | |
| extern int u_boot_hush_start(void);
 | |
| extern int parse_string_outer(const char *, int);
 | |
| extern int parse_file_outer(void);
 | |
| 
 | |
| int set_local_var(const char *s, int flg_export);
 | |
| void unset_local_var(const char *name);
 | |
| char *get_local_var(const char *s);
 | |
| 
 | |
| #if defined(CONFIG_HUSH_INIT_VAR)
 | |
| extern int hush_init_var (void);
 | |
| #endif
 | |
| #endif
 |