version 1.117, 2007/09/19 11:53:27 |
version 1.118, 2007/09/19 12:04:38 |
|
|
{ |
{ |
u_int i; |
u_int i; |
int argc, error; |
int argc, error; |
char qbuf[128], *linebuf, *lp, *cp, *arg; |
char *linebuf, *lp, *cp; |
|
|
linebuf = xstrdup(line); |
linebuf = xstrdup(line); |
|
|
|
|
/* build the argument vector */ |
/* build the argument vector */ |
error = 0; |
error = 0; |
for (lp = linebuf; lp != NULL;) { |
for (lp = linebuf; lp != NULL;) { |
if (*lp == '"') { |
cp = strsep(&lp, " \t"); |
/* double-quoted string */ |
if (cp == NULL) |
lp++; |
break; |
i = 0; |
else if (*cp == '\0') |
memset(qbuf, 0, sizeof(qbuf)); |
continue; |
while (*lp != '"') { |
|
if (*lp == '\\') |
|
lp++; |
|
if (*lp == '\0') { |
|
cvs_log(LP_ERR, "no terminating quote"); |
|
error++; |
|
break; |
|
} |
|
|
|
qbuf[i++] = *lp++; |
|
if (i == sizeof(qbuf) - 1) { |
|
error++; |
|
break; |
|
} |
|
} |
|
if (error) |
|
break; |
|
lp++; |
|
|
|
arg = qbuf; |
|
} else { |
|
cp = strsep(&lp, " \t"); |
|
if (cp == NULL) |
|
break; |
|
else if (*cp == '\0') |
|
continue; |
|
|
|
arg = cp; |
|
} |
|
|
|
if (argc == argvlen) { |
if (argc == argvlen) { |
error++; |
error++; |
break; |
break; |
} |
} |
|
|
argv[argc] = xstrdup(arg); |
argv[argc] = xstrdup(cp); |
argc++; |
argc++; |
} |
} |
|
|