diff options
author | Bart Schaefer <barts@users.sourceforge.net> | 2001-05-19 00:31:22 +0000 |
---|---|---|
committer | Bart Schaefer <barts@users.sourceforge.net> | 2001-05-19 00:31:22 +0000 |
commit | 90a1316345c1e347908ec29e0b2865a6f03ad4ab (patch) | |
tree | d1d90d247d446dfd1b0b9b39d3685bdf8dc7b19f | |
parent | 7a616bd5383f5a0ffc6a46ff5105c37978641e59 (diff) | |
download | zsh-90a1316345c1e347908ec29e0b2865a6f03ad4ab.tar.gz zsh-90a1316345c1e347908ec29e0b2865a6f03ad4ab.tar.xz zsh-90a1316345c1e347908ec29e0b2865a6f03ad4ab.zip |
Fix re-set of integer special params after unset.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | Src/params.c | 27 | ||||
-rw-r--r-- | Src/subst.c | 1 |
3 files changed, 15 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog index cee8cd531..798e3c54f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2001-05-18 Bart Schaefer <schaefer@zsh.org> + * 14388: Src/params.c, Src/subst.c: Correctly handle re-set of + of integer-typed special parameters such as SHLVL, after unset. + * 14385: Test/V01zmodload.ztst, Test/ztst.zsh: Fix typo in a comment; print a warning when unable to test zsh/example; make sure the file descriptor for that warning (and others in other diff --git a/Src/params.c b/Src/params.c index acbe448a2..28a8f1e85 100644 --- a/Src/params.c +++ b/Src/params.c @@ -1998,17 +1998,16 @@ setiparam(char *s, zlong val) if (!(v = getvalue(&vbuf, &s, 1))) { if ((ss = strchr(s, '['))) *ss = '\0'; - pm = createparam(t, ss ? PM_ARRAY : PM_INTEGER); + if (!(pm = createparam(t, ss ? PM_ARRAY : PM_INTEGER))) + pm = (Param) paramtab->getnode(paramtab, t); DPUTS(!pm, "BUG: parameter not created"); if (ss) { *ss = '['; - v = getvalue(&vbuf, &t, 1); - DPUTS(!v, "BUG: value not found for new parameter"); } else { - pm->u.val = val; - unqueue_signals(); - return pm; + pm->ct = outputradix; } + v = getvalue(&vbuf, &t, 1); + DPUTS(!v, "BUG: value not found for new parameter"); } mnval.type = MN_INTEGER; mnval.u.l = val; @@ -2042,20 +2041,16 @@ setnparam(char *s, mnumber val) *ss = '\0'; pm = createparam(t, ss ? PM_ARRAY : (val.type & MN_INTEGER) ? PM_INTEGER : PM_FFLOAT); + if (!pm) + pm = (Param) paramtab->getnode(paramtab, t); DPUTS(!pm, "BUG: parameter not created"); if (ss) { *ss = '['; - v = getvalue(&vbuf, &t, 1); - DPUTS(!v, "BUG: value not found for new parameter"); - } else { - if (val.type & MN_INTEGER) { - pm->ct = outputradix; - pm->u.val = val.u.l; - } else - pm->u.dval = val.u.d; - unqueue_signals(); - return pm; + } else if (val.type & MN_INTEGER) { + pm->ct = outputradix; } + v = getvalue(&vbuf, &t, 1); + DPUTS(!v, "BUG: value not found for new parameter"); } setnumvalue(v, val); unqueue_signals(); diff --git a/Src/subst.c b/Src/subst.c index 24103b3da..25eda1cee 100644 --- a/Src/subst.c +++ b/Src/subst.c @@ -1149,6 +1149,7 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub) isarr = 0; } pm = createparam(nulstring, isarr ? PM_ARRAY : PM_SCALAR); + DPUTS(!pm, "BUG: parameter not created"); if (isarr) pm->u.arr = aval; else |