version 1.4, 1996/06/26 05:38:12 |
version 1.5, 1998/06/26 21:21:10 |
|
|
*/ |
*/ |
|
|
#ifndef lint |
#ifndef lint |
|
#if 0 |
static char RCSid[] = |
static char RCSid[] = |
|
"$From: expand.c,v 6.18 1998/03/24 00:37:10 michaelc Exp $"; |
|
#else |
|
static char RCSid[] = |
"$OpenBSD$"; |
"$OpenBSD$"; |
|
#endif |
|
|
static char sccsid[] = "@(#)expand.c 5.2 (Berkeley) 3/28/86"; |
static char sccsid[] = "@(#)expand.c 5.2 (Berkeley) 3/28/86"; |
|
|
|
|
return; |
return; |
} |
} |
|
|
eargv[++eargc] = (char *) NULL; |
eargv[++eargc] = NULL; |
eargv[eargc - 1] = cp = xmalloc(len); |
eargv[eargc - 1] = cp = xmalloc(len); |
|
|
do { |
do { |
if (*s1 == QUOTECHAR) |
if (*s1 == QUOTECHAR) |
s1++; |
s1++; |
} while (*cp++ = *s1++); |
} while ((*cp++ = *s1++)); |
cp--; |
cp--; |
do { |
do { |
if (*s2 == QUOTECHAR) |
if (*s2 == QUOTECHAR) |
s2++; |
s2++; |
} while (*cp++ = *s2++); |
} while ((*cp++ = *s2++)); |
} |
} |
|
|
static void addpath(c) |
static void addpath(c) |
|
|
tilde = ""; |
tilde = ""; |
eargc = 0; |
eargc = 0; |
eargv = sortbase = argvbuf; |
eargv = sortbase = argvbuf; |
*eargv = (char *) NULL; |
*eargv = NULL; |
|
|
/* |
/* |
* Walk the name list and expand names into eargv[]; |
* Walk the name list and expand names into eargv[]; |
|
|
*/ |
*/ |
list = prev = NULL; |
list = prev = NULL; |
for (n = 0; n < eargc; n++) { |
for (n = 0; n < eargc; n++) { |
nl = makenl((char *)NULL); |
nl = makenl(NULL); |
nl->n_name = eargv[n]; |
nl->n_name = eargv[n]; |
if (prev == NULL) |
if (prev == NULL) |
list = prev = nl; |
list = prev = nl; |
|
|
if (ch == *cp) |
if (ch == *cp) |
return(cp); |
return(cp); |
|
|
return((u_char *)NULL); |
return(NULL); |
} |
} |
|
|
void expstr(s) |
void expstr(s) |
|
|
savec = *tail; |
savec = *tail; |
*tail = CNULL; |
*tail = CNULL; |
} |
} |
tp = lookup((char *)cp, LOOKUP, (struct namelist *)NULL); |
tp = lookup((char *)cp, LOOKUP, NULL); |
if (savec != CNULL) |
if (savec != CNULL) |
*tail = savec; |
*tail = savec; |
if (tp != NULL) { |
if (tp != NULL) { |
|
|
cp1 = (u_char *)pw->pw_dir; |
cp1 = (u_char *)pw->pw_dir; |
s = cp; |
s = cp; |
} |
} |
for (cp = (u_char *)path; *cp++ = *cp1++; ) |
for (cp = (u_char *)path; (*cp++ = *cp1++); ) |
; |
; |
tpathp = pathp = (char *)cp - 1; |
tpathp = pathp = (char *)cp - 1; |
} else { |
} else { |
|
|
sort(); |
sort(); |
} |
} |
|
|
static |
static int |
argcmp(a1, a2) |
argcmp(a1, a2) |
char **a1, **a2; |
char **a1, **a2; |
{ |
{ |
|
|
cp++, pathp++; |
cp++, pathp++; |
*pathp = CNULL; |
*pathp = CNULL; |
if (*oldcp == '{') { |
if (*oldcp == '{') { |
(void) execbrc(cp, (u_char *)NULL); |
(void) execbrc(cp, NULL); |
return; |
return; |
} |
} |
matchdir((char *)cp); |
matchdir((char *)cp); |
|
|
yyerror(path); |
yyerror(path); |
} |
} |
|
|
|
int |
execbrc(p, s) /* quote in p */ |
execbrc(p, s) /* quote in p */ |
u_char *p, *s; |
u_char *p, *s; |
{ |
{ |
|
|
return (0); |
return (0); |
} |
} |
|
|
|
int |
match(s, p) /* quote in p */ |
match(s, p) /* quote in p */ |
char *s, *p; |
char *s, *p; |
{ |
{ |
|
|
return (c); |
return (c); |
} |
} |
|
|
|
int |
amatch(s, p) /* quote in p */ |
amatch(s, p) /* quote in p */ |
register char *s; |
register char *s; |
register u_char *p; |
register u_char *p; |
|
|
case '[': |
case '[': |
ok = 0; |
ok = 0; |
lc = 077777; |
lc = 077777; |
while (cc = *p++) { |
while ((cc = *p++)) { |
if (cc == ']') { |
if (cc == ']') { |
if (ok) |
if (ok) |
break; |
break; |
|
|
else |
else |
Cat((u_char *)tilde, |
Cat((u_char *)tilde, |
(u_char *)tpathp); |
(u_char *)tpathp); |
} else |
} else { |
expsh(p); |
expsh(p); |
|
} |
pathp = spathp; |
pathp = spathp; |
*pathp = CNULL; |
*pathp = CNULL; |
return (0); |
return (0); |