(parse): Simplify. No functional change.
This commit is contained in:
parent
0e506556c2
commit
5017bb5daa
1 changed files with 28 additions and 32 deletions
|
@ -53,50 +53,46 @@
|
||||||
int
|
int
|
||||||
parse(char *buf, char **arg, char **condp, char *space, char **redir)
|
parse(char *buf, char **arg, char **condp, char *space, char **redir)
|
||||||
{
|
{
|
||||||
char *bp2;
|
char *ap;
|
||||||
char *bp1 = space;
|
int i, quoted, argnum;
|
||||||
int fs;
|
|
||||||
int quoted;
|
|
||||||
int argnum;
|
|
||||||
|
|
||||||
if (redir)
|
if (redir)
|
||||||
*redir = 0;
|
*redir = NULL;
|
||||||
if (condp != NULL)
|
if (condp)
|
||||||
*condp = NULL;
|
*condp = NULL;
|
||||||
for (argnum = 0; *buf && argnum < 127;) {
|
|
||||||
while (isspace((unsigned char)*buf))
|
for (argnum = 0; argnum < 127;) {
|
||||||
buf++;
|
for (; isspace(*(unsigned char *)buf); buf++) ;
|
||||||
if (!*buf)
|
if (!*buf)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* recognize redirection syntax */
|
||||||
if (redir && (*buf == '>' || *buf == '|')) {
|
if (redir && (*buf == '>' || *buf == '|')) {
|
||||||
*redir = buf;
|
*redir = buf;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* copy argument */
|
||||||
quoted = 0;
|
quoted = 0;
|
||||||
for (bp2 = bp1; *buf;) {
|
ap = space;
|
||||||
if (!quoted && isspace((unsigned char)*buf)) {
|
for (; *buf && (quoted || !isspace(*(unsigned char *)buf)); buf++) {
|
||||||
buf++;
|
if (*buf == '"')
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (*buf == '"') {
|
|
||||||
quoted = !quoted;
|
quoted = !quoted;
|
||||||
buf++;
|
else if (*buf >= 0x20 && *buf <= 0x7e)
|
||||||
} else {
|
*space++ = *buf;
|
||||||
if (*buf >= 0x20 && *buf <= 0x7e)
|
/* else funny character; ignore */
|
||||||
*bp1++ = *buf++;
|
}
|
||||||
|
*space++ = 0;
|
||||||
|
|
||||||
|
/* store copied argument as conditional or regular argument */
|
||||||
|
if (condp && *ap == '?')
|
||||||
|
*condp = ap + 1;
|
||||||
else
|
else
|
||||||
buf++;
|
arg[argnum++] = ap;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
*bp1++ = 0;
|
for (i = argnum; i < 128; i++)
|
||||||
if (*bp2 == '?' && condp != NULL) {
|
arg[i] = NULL;
|
||||||
*condp = bp2 + 1;
|
|
||||||
} else {
|
|
||||||
arg[argnum] = bp2;
|
|
||||||
argnum++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (fs = argnum; fs < 128; fs++)
|
|
||||||
arg[fs] = NULL;
|
|
||||||
return argnum;
|
return argnum;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue