source: rtems/cpukit/libmisc/shell/shell_makeargs.c @ 0a973a9e

4.104.115
Last change on this file since 0a973a9e was 0a973a9e, checked in by Joel Sherrill <joel.sherrill@…>, on 03/16/10 at 14:05:55

2010-03-16 Joel Sherrill <joel.sherrill@…>

  • libmisc/shell/shell_makeargs.c: Fix bugs introduced by patch attempting to add quoted arguments.
  • Property mode set to 100644
File size: 1.1 KB
Line 
1/*
2 *  Split string into argc/argv style argument list
3 *
4 *  COPYRIGHT (c) 1989-2008.
5 *  On-Line Applications Research Corporation (OAR).
6 *
7 *  The license and distribution terms for this file may be
8 *  found in the file LICENSE in this distribution or at
9 *  http://www.rtems.com/license/LICENSE.
10 *
11 *  $Id$
12 */
13
14#if HAVE_CONFIG_H
15#include "config.h"
16#endif
17
18#include <string.h>
19#include <ctype.h>
20
21int rtems_shell_make_args(
22  char  *commandLine,
23  int   *argc_p,
24  char **argv_p,
25  int    max_args
26)
27{
28  int   argc;
29  char *ch;
30  int   status = 0;
31 
32  argc = 0;
33  ch = commandLine;
34
35  while ( *ch ) {
36
37    while ( isspace((unsigned char)*ch) ) ch++;
38
39    if ( *ch == '\0' )
40      break;
41
42    if ( *ch == '"' ) {
43      argv_p[ argc ] = ++ch;
44      while ( ( *ch != '\0' ) && ( *ch != '"' ) ) ch++;
45    } else {
46      argv_p[ argc ] = ch;
47      while ( ( *ch != '\0' ) && ( !isspace((unsigned char)*ch) ) ) ch++;
48    }
49
50    argc++;
51
52    if ( *ch == '\0' )
53      break;
54
55    *ch++ = '\0';
56
57    if ( argc == (max_args-1) ) {
58        status = -1;
59        break;
60    }
61
62
63  }
64  argv_p[ argc ] = NULL;
65  *argc_p = argc;
66  return status;
67}
68
Note: See TracBrowser for help on using the repository browser.