On Sun, Jul 10, 2005 at 12:57:47AM +0000, Bart Schaefer wrote:
> I just noticed that, even in the latest build, if LC_ALL starts out set
> (even to nothing), but not exported, then when "LC_ALL=C foo" is run
> LC_ALL becomes and remains exported, even though its value gets reset
> to the previous state.
There are two completely separate parts of the shell that restore
parameters. There is one I wrote for function scope, and there is a second
one that someone else wrote without taking any notice of the first one that
restores parameters in this case. (Good job I never get bitter, eh?) This
second one doesn't take account of restoring a special parameter when the
local value is exported and the old value isn't. For specials there is
always an entry in the table, so this applies even if LC_ALL isn't actually
set.
It should just be a case of removing stuff from the environment if we know
it shouldn't be there. I can't see any cases when this would be wrong,
anyway. (There are POSIX exceptions, which I don't think cover LC_ALL
anyway, where the value is preserved after the function call, but none that
would force an export to be inconsistent with the local value.)
Index: Src/exec.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/exec.c,v
retrieving revision 1.128
diff -u -r1.128 exec.c
--- Src/exec.c 9 Dec 2007 23:53:33 -0000 1.128
+++ Src/exec.c 21 Feb 2008 18:14:41 -0000
@@ -3113,6 +3113,8 @@
DPUTS(!tpm || PM_TYPE(pm->node.flags) !=
PM_TYPE(tpm->node.flags) ||
!(pm->node.flags & PM_SPECIAL),
"BUG: in restoring special parameters");
+ if (!pm->env && tpm->env)
+ delenv(tpm);
tpm->node.flags = pm->node.flags;
switch (PM_TYPE(pm->node.flags)) {
case PM_SCALAR:
--
Peter Stephenson <[EMAIL PROTECTED]> Software Engineer
CSR PLC, Churchill House, Cambridge Business Park, Cowley Road
Cambridge, CB4 0WZ, UK Tel: +44 (0)1223 692070
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]