diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2010-03-11 15:35:24 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2010-03-11 15:35:24 +0000 |
commit | 1fe7324a08ece271886a1aabcfef9c963004b132 (patch) | |
tree | 0224c06e6eeeb8b28f1b61a58fdb3d19b73de253 /cpukit/libmisc | |
parent | Remove. (diff) | |
download | rtems-1fe7324a08ece271886a1aabcfef9c963004b132.tar.bz2 |
2010-03-11 Andrei Mozzhuhin <nopscmn@gmail.com>
PR 1496/shell
* libmisc/shell/shell_makeargs.c: Add support for quoted arguments.
Diffstat (limited to 'cpukit/libmisc')
-rw-r--r-- | cpukit/libmisc/shell/shell_makeargs.c | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/cpukit/libmisc/shell/shell_makeargs.c b/cpukit/libmisc/shell/shell_makeargs.c index 77d937e101..4901b54bd7 100644 --- a/cpukit/libmisc/shell/shell_makeargs.c +++ b/cpukit/libmisc/shell/shell_makeargs.c @@ -25,22 +25,38 @@ int rtems_shell_make_args( ) { int argc; - char *command; + char *ch; int status = 0; - + argc = 0; - command = commandLine; + ch = commandLine; + + while ( *ch ) { + + while ( isspace(*ch) ) ch++; - while ( 1 ) { - command = strtok( command, " \t\r\n" ); - if ( command == NULL ) + if ( *ch == '\0' ) break; - argv_p[ argc++ ] = command; - command = '\0'; - if ( argc == (max_args-1) ) { - status = -1; + + if ( *ch == '"' ) { + argv_p[ argc++ ] = ++ch; + while ( ( *ch == '\0' ) && ( *ch != '"' ) ) ch++; + } else { + argv_p[ argc++ ] = ch; + while ( ( *ch == '\0' ) && ( !isspace(*ch) ) ) ch++; + } + + if ( *ch == '\0' ) break; + + *ch++ = '\0'; + + if ( argc == (max_args-1) ) { + status = -1; + break; } + + } argv_p[ argc ] = NULL; *argc_p = argc; |