(parse): Simplify. No functional change.

This commit is contained in:
Markus Armbruster 2007-11-17 16:48:01 +00:00
parent 0e506556c2
commit 5017bb5daa

View file

@ -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;
} }