diff options
author | Bart Schaefer <schaefer@zsh.org> | 2024-02-03 12:07:14 -0800 |
---|---|---|
committer | Bart Schaefer <schaefer@zsh.org> | 2024-02-03 12:07:14 -0800 |
commit | 8801665e5b241c3adac9c36b6135d057c5ab2a59 (patch) | |
tree | 84a2143d3b83d2201ab5dec00c7658eb8339fac9 /Src/params.c | |
parent | 18400b68e49b242da55ca3a465ea496d26f47938 (diff) | |
download | zsh-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.c | 17 |
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) { |