1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-12-15 20:51:27 +01:00

15931: EXIT traps from exit in subshell; 15965: glob -> zglob

This commit is contained in:
Peter Stephenson 2001-10-08 08:13:11 +00:00
parent b109834dc2
commit cc0d931682
4 changed files with 13 additions and 4 deletions

View file

@ -3429,12 +3429,16 @@ bin_break(char *name, char **argv, char *ops, int func)
}
/*FALLTHROUGH*/
case BIN_EXIT:
if (locallevel) {
if (locallevel > forklevel) {
/*
* We don't exit directly from functions to allow tidying
* up, in particular EXIT traps. We still need to perform
* the usual interactive tests to see if we can exit at
* all, however.
*
* The forklevel test means we *do* exit from a subshell
* inside a function when we reach the level of the
* function itself.
*/
if (stopmsg || (zexit(0,2), !stopmsg)) {
retflag = 1;

View file

@ -1757,7 +1757,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), 0);
zglob(args, firstnode(args), 0);
else if (!unglobbed) {
for (node = firstnode(args); node; incnode(node))
untokenize((char *) getdata(node));
@ -2489,6 +2489,10 @@ fixfds(int *save)
errno = old_errno;
}
/**/
int
forklevel;
/**/
static void
entersubsh(int how, int cl, int fake)
@ -2557,6 +2561,7 @@ entersubsh(int how, int cl, int fake)
if (cl)
clearjobtab();
times(&shtms);
forklevel = locallevel;
}
/* close internal shell fds */

View file

@ -920,7 +920,7 @@ gmatchcmp(Gmatch a, Gmatch b)
/**/
void
glob(LinkList list, LinkNode np, int nountok)
zglob(LinkList list, LinkNode np, int nountok)
{
struct qual *qo, *qn, *ql;
LinkNode node = prevnode(np);

View file

@ -233,7 +233,7 @@ globlist(LinkList list, int nountok)
badcshglob = 0;
for (node = firstnode(list); !errflag && node; node = next) {
next = nextnode(node);
glob(list, node, nountok);
zglob(list, node, nountok);
}
if (badcshglob == 1)
zerr("no match", NULL, 0);