summaryrefslogtreecommitdiff
path: root/Src/params.c
diff options
context:
space:
mode:
authorBart Schaefer <schaefer@zsh.org>2024-02-03 12:07:14 -0800
committerBart Schaefer <schaefer@zsh.org>2024-02-03 12:07:14 -0800
commit8801665e5b241c3adac9c36b6135d057c5ab2a59 (patch)
tree84a2143d3b83d2201ab5dec00c7658eb8339fac9 /Src/params.c
parent18400b68e49b242da55ca3a465ea496d26f47938 (diff)
downloadzsh-8801665e5b241c3adac9c36b6135d057c5ab2a59.tar.gz
zsh-8801665e5b241c3adac9c36b6135d057c5ab2a59.zip
52513: fixes and doc for using nofork substitutions with private parameters
Also fixes a crash bug with {fd}>&N redirections and private parameters
Diffstat (limited to 'Src/params.c')
-rw-r--r--Src/params.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/Src/params.c b/Src/params.c
index 9f0cbcd67..a722a20f6 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -1049,7 +1049,7 @@ createparam(char *name, int flags)
/* POSIXBUILTINS horror: we need to retain 'export' flags */
(isset(POSIXBUILTINS) && (oldpm->node.flags & PM_EXPORTED))) {
if (oldpm->node.flags & PM_RO_BY_DESIGN) {
- zerr("%s: can't change parameter attribute",
+ zerr("%s: can't modify read-only parameter",
name);
return NULL;
}
@@ -3615,9 +3615,18 @@ assignnparam(char *s, mnumber val, int flags)
pm = createparam(t, ss ? PM_ARRAY :
isset(POSIXIDENTIFIERS) ? PM_SCALAR :
(val.type & MN_INTEGER) ? PM_INTEGER : PM_FFLOAT);
- if (!pm)
- pm = (Param) paramtab->getnode(paramtab, t);
- DPUTS(!pm, "BUG: parameter not created");
+ if (errflag) {
+ /* assume error message already output */
+ unqueue_signals();
+ return NULL;
+ }
+ if (!pm && !(pm = (Param) paramtab->getnode(paramtab, t))) {
+ DPUTS(!pm, "BUG: parameter not created");
+ if (!errflag)
+ zerr("%s: parameter not found", t);
+ unqueue_signals();
+ return NULL;
+ }
if (ss) {
*ss = '[';
} else if (val.type & MN_INTEGER) {