diff options
author | James Yang | 2008-01-09 11:17:49 -0600 |
---|---|---|
committer | Wolfgang Denk | 2008-01-09 22:53:20 +0100 |
commit | 6636b62a6efc7f14e6e788788631ae7a7fca4537 (patch) | |
tree | b06d73e6a8e7f7339a3a309f39ec93dc7c25d000 /common | |
parent | 7ca90513486abd4ae50bd1b7403f47cc58c5ad25 (diff) |
Expose parse_line() globally.
Add new function readline_into_buffer() that allows the
output of readline to be put into a pointer to char buffer.
This refactoring allows other functions besides the
main command loop to also use the same input mechanism.
Signed-off-by: James Yang <James.Yang@freescale.com>
Acked-by: Jon Loeliger <jdl@freescale.com>
Diffstat (limited to 'common')
-rw-r--r-- | common/main.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/common/main.c b/common/main.c index 4253eac2d4f..ad2a386c865 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 |