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:
parent
b109834dc2
commit
cc0d931682
4 changed files with 13 additions and 4 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue