mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-01 09:41:44 +02:00
zsh-workers/9395
This commit is contained in:
parent
8750814108
commit
09a9a37aac
3 changed files with 29 additions and 11 deletions
36
Src/exec.c
36
Src/exec.c
|
@ -3281,7 +3281,6 @@ stripkshdef(Eprog prog, char *name)
|
|||
{
|
||||
Wordcode pc = prog->prog;
|
||||
wordcode code;
|
||||
Eprog ret;
|
||||
|
||||
if (!prog)
|
||||
return NULL;
|
||||
|
@ -3301,16 +3300,33 @@ stripkshdef(Eprog prog, char *name)
|
|||
*pc != 1 || strcmp(name, ecrawstr(prog, pc + 1)))
|
||||
return prog;
|
||||
|
||||
ret = (Eprog) zhalloc(sizeof(*prog));
|
||||
ret->len = (WC_FUNCDEF_SKIP(code) - 3) * sizeof(wordcode);
|
||||
ret->prog = pc + 3;
|
||||
ret->strs = (char *) (pc + pc[3]);
|
||||
ret->shf = NULL;
|
||||
ret->pats = prog->pats;
|
||||
ret->npats = prog->npats;
|
||||
ret->heap = 1;
|
||||
{
|
||||
Eprog ret;
|
||||
Wordcode end = pc + WC_FUNCDEF_SKIP(code);
|
||||
int nprg = pc[2] - 4;
|
||||
int npats = pc[3];
|
||||
int plen, len, i;
|
||||
Patprog *pp;
|
||||
|
||||
return ret;
|
||||
pc += 4;
|
||||
|
||||
plen = (end - pc) * sizeof(wordcode);
|
||||
len = plen + (npats * sizeof(Patprog));
|
||||
|
||||
ret = (Eprog) zhalloc(sizeof(*ret));
|
||||
ret->heap = 1;
|
||||
ret->len = len;
|
||||
ret->npats = npats;
|
||||
ret->pats = pp = (Patprog *) zhalloc(len);
|
||||
ret->prog = (Wordcode) (ret->pats + npats);
|
||||
for (i = npats; i--; pp++)
|
||||
*pp = dummy_patprog1;
|
||||
memcpy(ret->prog, pc, plen);
|
||||
ret->strs = (char *) (ret->prog + nprg);
|
||||
ret->shf = NULL;
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
/* check to see if AUTOCD applies here */
|
||||
|
|
|
@ -2467,10 +2467,11 @@ ecgetarr(Estate s, int num, int dup)
|
|||
{
|
||||
char **ret, **rp;
|
||||
|
||||
ret = rp = (char **) zhalloc(num * sizeof(char *));
|
||||
ret = rp = (char **) zhalloc((num + 1) * sizeof(char *));
|
||||
|
||||
while (num--)
|
||||
*rp++ = ecgetstr(s, dup);
|
||||
*rp = NULL;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -636,6 +636,7 @@ gettext2(Estate state)
|
|||
break;
|
||||
case COND_MOD:
|
||||
taddstr(ecgetstr(state, 0));
|
||||
taddchr(' ');
|
||||
taddlist(state, WC_COND_SKIP(code));
|
||||
stack = 1;
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue