diff options
| -rw-r--r-- | common/main.c | 25 | ||||
| -rw-r--r-- | include/common.h | 2 | 
2 files changed, 17 insertions, 10 deletions
| diff --git a/common/main.c b/common/main.c index 4253eac2d..ad2a386c8 100644 --- a/common/main.c +++ b/common/main.c @@ -59,7 +59,6 @@ extern int do_bootd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);  #define MAX_DELAY_STOP_STR 32 -static int parse_line (char *, char *[]);  #if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)  static int abortboot(int);  #endif @@ -918,8 +917,15 @@ static int cread_line(const char *const prompt, char *buf, unsigned int *len)   */  int readline (const char *const prompt)  { +	return readline_into_buffer(prompt, console_buffer); +} + + +int readline_into_buffer (const char *const prompt, char * buffer) +{ +	char *p = buffer; +	char * p_buf = p;  #ifdef CONFIG_CMDLINE_EDITING -	char *p = console_buffer;  	unsigned int len=MAX_CMDBUF_SIZE;  	int rc;  	static int initted = 0; @@ -934,7 +940,6 @@ int readline (const char *const prompt)  	rc = cread_line(prompt, p, &len);  	return rc < 0 ? rc : len;  #else -	char   *p = console_buffer;  	int	n = 0;				/* buffer index		*/  	int	plen = 0;			/* prompt length	*/  	int	col;				/* output column cnt	*/ @@ -972,13 +977,13 @@ int readline (const char *const prompt)  		case '\n':  			*p = '\0';  			puts ("\r\n"); -			return (p - console_buffer); +			return (p - p_buf);  		case '\0':				/* nul			*/  			continue;  		case 0x03:				/* ^C - break		*/ -			console_buffer[0] = '\0';	/* discard input */ +			p_buf[0] = '\0';	/* discard input */  			return (-1);  		case 0x15:				/* ^U - erase line	*/ @@ -986,20 +991,20 @@ int readline (const char *const prompt)  				puts (erase_seq);  				--col;  			} -			p = console_buffer; +			p = p_buf;  			n = 0;  			continue;  		case 0x17:				/* ^W - erase word	*/ -			p=delete_char(console_buffer, p, &col, &n, plen); +			p=delete_char(p_buf, p, &col, &n, plen);  			while ((n > 0) && (*p != ' ')) { -				p=delete_char(console_buffer, p, &col, &n, plen); +				p=delete_char(p_buf, p, &col, &n, plen);  			}  			continue;  		case 0x08:				/* ^H  - backspace	*/  		case 0x7F:				/* DEL - backspace	*/ -			p=delete_char(console_buffer, p, &col, &n, plen); +			p=delete_char(p_buf, p, &col, &n, plen);  			continue;  		default: @@ -1012,7 +1017,7 @@ int readline (const char *const prompt)  					/* if auto completion triggered just continue */  					*p = '\0';  					if (cmd_auto_complete(prompt, console_buffer, &n, &col)) { -						p = console_buffer + n;	/* reset */ +						p = p_buf + n;	/* reset */  						continue;  					}  #endif diff --git a/include/common.h b/include/common.h index 493417f87..3b5bd8c52 100644 --- a/include/common.h +++ b/include/common.h @@ -197,6 +197,8 @@ int	print_buffer (ulong addr, void* data, uint width, uint count, uint linelen);  void	main_loop	(void);  int	run_command	(const char *cmd, int flag);  int	readline	(const char *const prompt); +int	readline_into_buffer	(const char *const prompt, char * buffer); +int	parse_line (char *, char *[]);  void	init_cmd_timeout(void);  void	reset_cmd_timeout(void); |