mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-10 12:40:58 +02:00
zsh-workers/9777
This commit is contained in:
parent
9aa1735b63
commit
493876e0c7
5 changed files with 22 additions and 17 deletions
|
@ -2219,7 +2219,7 @@ gen_matches_files(int dirs, int execs, int all)
|
|||
/* Do the globbing... */
|
||||
remnulargs(p);
|
||||
addlinknode(l, p);
|
||||
globlist(l);
|
||||
globlist(l, 0);
|
||||
/* And see if that produced a filename. */
|
||||
tt = nonempty(l);
|
||||
while (ugetnode(l));
|
||||
|
@ -3334,7 +3334,7 @@ makecomplistflags(Compctl cc, char *s, int incmd, int compadd)
|
|||
tokenize(p);
|
||||
remnulargs(p);
|
||||
addlinknode(l, p);
|
||||
globlist(l);
|
||||
globlist(l, 0);
|
||||
|
||||
if (nonempty(l)) {
|
||||
/* And add the resulting words. */
|
||||
|
@ -3483,7 +3483,7 @@ makecomplistflags(Compctl cc, char *s, int incmd, int compadd)
|
|||
/* Do the globbing. */
|
||||
ng = opts[NULLGLOB];
|
||||
opts[NULLGLOB] = 1;
|
||||
globlist(l);
|
||||
globlist(l, 0);
|
||||
opts[NULLGLOB] = ng;
|
||||
/* Get the results. */
|
||||
if (nonempty(l) && peekfirst(l)) {
|
||||
|
@ -3679,7 +3679,7 @@ makecomplistflags(Compctl cc, char *s, int incmd, int compadd)
|
|||
/* Fine, now do full expansion. */
|
||||
prefork(foo, 0);
|
||||
if (!errflag) {
|
||||
globlist(foo);
|
||||
globlist(foo, 0);
|
||||
if (!errflag)
|
||||
/* And add the resulting words as matches. */
|
||||
for (n = firstnode(foo); n; incnode(n))
|
||||
|
|
|
@ -1612,11 +1612,11 @@ doexpansion(char *s, int lst, int olst, int explincmd)
|
|||
prefork(vl, 0);
|
||||
if (errflag)
|
||||
goto end;
|
||||
if ((lst == COMP_LIST_EXPAND) || (lst == COMP_EXPAND)) {
|
||||
if (lst == COMP_LIST_EXPAND || lst == COMP_EXPAND) {
|
||||
int ng = opts[NULLGLOB];
|
||||
|
||||
opts[NULLGLOB] = 1;
|
||||
globlist(vl);
|
||||
globlist(vl, 1);
|
||||
opts[NULLGLOB] = ng;
|
||||
}
|
||||
if (errflag)
|
||||
|
@ -1645,11 +1645,14 @@ doexpansion(char *s, int lst, int olst, int explincmd)
|
|||
foredel(we - wb);
|
||||
while ((ss = (char *)ugetnode(vl))) {
|
||||
ret = 0;
|
||||
untokenize(ss);
|
||||
ss = quotename(ss, NULL);
|
||||
untokenize(ss);
|
||||
inststr(ss);
|
||||
#if 0
|
||||
if (olst != COMP_EXPAND_COMPLETE || nonempty(vl) ||
|
||||
(cs && line[cs-1] != '/')) {
|
||||
#endif
|
||||
if (nonempty(vl)) {
|
||||
spaceinline(1);
|
||||
line[cs++] = ' ';
|
||||
}
|
||||
|
|
|
@ -1419,7 +1419,7 @@ addvars(Estate state, Wordcode pc, int export)
|
|||
return;
|
||||
}
|
||||
if (isset(GLOBASSIGN) || !isstr)
|
||||
globlist(vl);
|
||||
globlist(vl, 0);
|
||||
if (errflag) {
|
||||
state->pc = opc;
|
||||
return;
|
||||
|
@ -1520,7 +1520,7 @@ execsubst(LinkList strs)
|
|||
prefork(strs, esprefork);
|
||||
if (esglob) {
|
||||
LinkList ostrs = strs;
|
||||
globlist(strs);
|
||||
globlist(strs, 0);
|
||||
strs = ostrs;
|
||||
}
|
||||
}
|
||||
|
@ -1644,7 +1644,7 @@ execcmd(Estate state, int input, int output, int how, int last1)
|
|||
if (!(cflags & BINF_NOGLOB))
|
||||
while (!checked && !errflag && args && nonempty(args) &&
|
||||
has_token((char *) peekfirst(args)))
|
||||
glob(args, firstnode(args));
|
||||
glob(args, firstnode(args), 0);
|
||||
else if (!unglobbed) {
|
||||
for (node = firstnode(args); node; incnode(node))
|
||||
untokenize((char *) getdata(node));
|
||||
|
@ -1927,7 +1927,7 @@ execcmd(Estate state, int input, int output, int how, int last1)
|
|||
|
||||
if ((esglob = !(cflags & BINF_NOGLOB)) && args) {
|
||||
LinkList oargs = args;
|
||||
globlist(args);
|
||||
globlist(args, 0);
|
||||
args = oargs;
|
||||
}
|
||||
if (errflag) {
|
||||
|
|
10
Src/glob.c
10
Src/glob.c
|
@ -872,7 +872,7 @@ gmatchcmp(Gmatch a, Gmatch b)
|
|||
|
||||
/**/
|
||||
void
|
||||
glob(LinkList list, LinkNode np)
|
||||
glob(LinkList list, LinkNode np, int nountok)
|
||||
{
|
||||
struct qual *qo, *qn, *ql;
|
||||
LinkNode node = prevnode(np);
|
||||
|
@ -887,7 +887,8 @@ glob(LinkList list, LinkNode np)
|
|||
|
||||
MUSTUSEHEAP("glob");
|
||||
if (unset(GLOBOPT) || !haswilds(ostr)) {
|
||||
untokenize(ostr);
|
||||
if (!nountok)
|
||||
untokenize(ostr);
|
||||
return;
|
||||
}
|
||||
save_globstate(saved);
|
||||
|
@ -1339,7 +1340,8 @@ glob(LinkList list, LinkNode np)
|
|||
if (!q || errflag) { /* if parsing failed */
|
||||
restore_globstate(saved);
|
||||
if (unset(BADPATTERN)) {
|
||||
untokenize(ostr);
|
||||
if (!nountok)
|
||||
untokenize(ostr);
|
||||
insertlinknode(list, node, ostr);
|
||||
return;
|
||||
}
|
||||
|
@ -1578,7 +1580,7 @@ xpandredir(struct redir *fn, LinkList tab)
|
|||
prefork(fake, isset(MULTIOS) ? 0 : PF_SINGLE);
|
||||
/* Globbing is only done for multios. */
|
||||
if (!errflag && isset(MULTIOS))
|
||||
globlist(fake);
|
||||
globlist(fake, 0);
|
||||
if (errflag)
|
||||
return 0;
|
||||
if (nonempty(fake) && !nextnode(firstnode(fake))) {
|
||||
|
|
|
@ -212,14 +212,14 @@ stringsubst(LinkList list, LinkNode node, int ssub)
|
|||
|
||||
/**/
|
||||
mod_export void
|
||||
globlist(LinkList list)
|
||||
globlist(LinkList list, int nountok)
|
||||
{
|
||||
LinkNode node, next;
|
||||
|
||||
badcshglob = 0;
|
||||
for (node = firstnode(list); !errflag && node; node = next) {
|
||||
next = nextnode(node);
|
||||
glob(list, node);
|
||||
glob(list, node, nountok);
|
||||
}
|
||||
if (badcshglob == 1)
|
||||
zerr("no match", NULL, 0);
|
||||
|
|
Loading…
Reference in a new issue