comparison rvinterf/asyncshell/parse.c @ 1013:6eee1e547778

fc-shell: arbitrary send command implemented in interactive mode
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Sun, 20 Mar 2016 22:27:07 +0000
parents
children
comparison
equal deleted inserted replaced
1012:93f4fc26b204 1013:6eee1e547778
1 /*
2 * This module implements the parser helper function that allows
3 * the same code to be reused between interactive and one-shot
4 * versions of the same command.
5 */
6
7 #include <stdio.h>
8 #include <ctype.h>
9 #include <string.h>
10 #include <strings.h>
11 #include <stdlib.h>
12
13 parse_interactive_command_into_argv(argstr, argv, min_arg, max_arg, argcp)
14 char *argstr, **argv;
15 int min_arg, max_arg, *argcp;
16 {
17 char *cp, **ap;
18
19 cp = argstr;
20 for (ap = argv; ; ) {
21 while (isspace(*cp))
22 cp++;
23 if (!*cp || *cp == '#')
24 break;
25 if (ap - argv >= max_arg) {
26 printf("error: too many arguments\n");
27 return(-1);
28 }
29 if (*cp == '"') {
30 *ap++ = ++cp;
31 while (*cp && *cp != '"')
32 cp++;
33 if (*cp != '"') {
34 printf("error: unterminated quoted string\n");
35 return(-1);
36 }
37 *cp++ = '\0';
38 } else {
39 *ap++ = cp;
40 while (*cp && !isspace(*cp))
41 cp++;
42 if (*cp)
43 *cp++ = '\0';
44 }
45 }
46 if (ap - argv < min_arg) {
47 printf("error: too few arguments\n");
48 return(-1);
49 }
50 *ap = 0;
51 *argcp = ap - argv;
52 return(0);
53 }