Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: PATCH: zsh-4.2.1: unset does not follow spec
- X-seq: zsh-workers 20400
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: "Sean C. Farley" <sean@xxxxxxxxxx>
- Subject: Re: PATCH: zsh-4.2.1: unset does not follow spec
- Date: Wed, 22 Sep 2004 08:28:03 -0700 (PDT)
- Cc: zsh-workers@xxxxxxxxxx
- In-reply-to: <20040922091323.V45751@xxxxxxxxxxxxxxx>
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
- References: <20040922091323.V45751@xxxxxxxxxxxxxxx>
- Reply-to: zsh-workers@xxxxxxxxxx
On Wed, 22 Sep 2004, Sean C. Farley wrote:
Recently, I read that FreeBSD's /bin/sh fails:
http://www.freebsd.org/cgi/query-pr.cgi?pr=standards/45738
the IEEE Std 1003.1-2001:
http://www.opengroup.org/onlinepubs/007904975/utilities/unset.html
when it comes to the builtin unset. tcsh and bash do follow it.
I don't see how zsh "fails" this specification.
EXIT STATUS
0
All name operands were successfully unset.
>0
At least one name could not be unset.
It appears to me that FreeBSD and Zsh are interpreting "could not be
unset" to include variables that were not set in the first place. After
all, if it isn't set, you can't UNset it, can you? It doesn't say "0 if
all name operands end up unset after this is finished, regardless of their
previous state" (which is how bash and tcsh appear to interpret it).
I'm going to ask about this on the austin-group list. It'll give them
something to discuss that they might actually come to agreement on.--- Src/builtin.c.orig Fri Aug 13 05:22:42 2004
+++ Src/builtin.c Wed Sep 22 09:44:04 2004
@@ -2638,9 +2638,9 @@
returnval = 1;
}
}
- /* If we didn't match anything, we return 1. */
+ /* If we didn't match anything, we return 0. */
if (!match)
- returnval = 1;
+ returnval = 0;
return returnval;
}
@@ -2661,7 +2661,7 @@
gethashnode2(paramtab, s) :
paramtab->getnode(paramtab, s));
if (!pm)
- returnval = 1;
+ returnval = 0;
else if ((pm->flags & PM_RESTRICTED) && isset(RESTRICTED)) {
zerrnam(name, "%s: restricted", pm->nam, 0);
returnval = 1;
@@ -3056,9 +3056,17 @@
returnval = 1;
}
}
- /* If we didn't match anything, we return 1. */
- if (!match)
- returnval = 1;
+ /*
+ * If we didn't match anything, we return 0 for functions and 1 for
+ * all other hash types.
+ */
+ if (!match) {
+ if (OPT_ISSET(ops,'f')) {
+ returnval = 0;
+ } else {
+ returnval = 1;
+ }
+ }
return returnval;
}
@@ -3069,7 +3077,11 @@
ht->freenode(hn);
} else {
zwarnnam(name, "no such hash table element: %s", *argv, 0);
- returnval = 1;
+ if (OPT_ISSET(ops,'f')) {
+ returnval = 0;
+ } else {
+ returnval = 1;
+ }
}
}
unqueue_signals();
Messages sorted by:
Reverse Date,
Date,
Thread,
Author