diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2008-09-13 19:59:13 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2008-09-13 19:59:13 +0000 |
commit | b8a36eea87836c8156e4d3d587cb57252e02c7a2 (patch) | |
tree | b14787450931a0dd4008a39db358f73204e11a5f /Src | |
parent | 6b68cc95c7448201d11b87004715fd8e8cd6543e (diff) | |
download | zsh-b8a36eea87836c8156e4d3d587cb57252e02c7a2.tar.gz zsh-b8a36eea87836c8156e4d3d587cb57252e02c7a2.tar.xz zsh-b8a36eea87836c8156e4d3d587cb57252e02c7a2.zip |
25662: declare -p should never create arguments
Diffstat (limited to 'Src')
-rw-r--r-- | Src/builtin.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/Src/builtin.c b/Src/builtin.c index 8adc7fcb1..8246453f4 100644 --- a/Src/builtin.c +++ b/Src/builtin.c @@ -2473,10 +2473,17 @@ bin_typeset(char *name, char **argv, Options ops, int func) /* Take arguments literally. Don't glob */ while ((asg = getasg(*argv++))) { - if (!typeset_single(name, asg->name, - (Param) (paramtab == realparamtab ? - gethashnode2(paramtab, asg->name) : - paramtab->getnode(paramtab, asg->name)), + HashNode hn = (paramtab == realparamtab ? + gethashnode2(paramtab, asg->name) : + paramtab->getnode(paramtab, asg->name)); + if (OPT_ISSET(ops,'p')) { + if (hn) + printparamnode(hn, printflags); + else + zwarnnam(name, "no such variable: %s", asg->name); + continue; + } + if (!typeset_single(name, asg->name, (Param)hn, func, on, off, roff, asg->value, NULL, ops, 0)) returnval = 1; |