Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Red Hat zsh bug report / ZDOTDIR w/ emulate

On Saturday 30 August 2008, Daniel Qarras wrote:
> Hi,
> not sure if anyone has noticed but Red Hat has introduced a strange workaround into their zsh initscripts to workaround a corner case ZDOTDIR bug in zsh:
> https://bugzilla.redhat.com/show_bug.cgi?id=430665#c19
> https://bugzilla.redhat.com/show_bug.cgi?id=430665#c25
> https://bugzilla.redhat.com/show_bug.cgi?id=430665#c27
> The comments above comment #19 are usual bickering about RH's zsh init scripts but it seems that those three comments illustrate that there's something fishy with ZDOTDIR when using "emulate".

Yes, emulate is never reset contrary to manual. The patch below is the
most simple fix; one problem is it restores emulation mode if
LOCAL_OPTIONS is set, not when "emulate -L" is used as documentation
can be interpreted. OTOH documentation can be interpreted this way also.

Peter, is it OK to commit?

Index: Src/exec.c
RCS file: /cvsroot/zsh/zsh/Src/exec.c,v
retrieving revision 1.142
diff -u -p -r1.142 exec.c
--- Src/exec.c  25 Aug 2008 17:28:16 -0000      1.142
+++ Src/exec.c  30 Aug 2008 19:54:54 -0000
@@ -4184,7 +4184,7 @@ doshfunc(char *name, Eprog prog, LinkLis
     int oldzoptind, oldlastval, oldoptcind, oldnumpipestats, ret;
     int *oldpipestats = NULL;
     char saveopts[OPT_SIZE], *oldscriptname = scriptname, *fname = dupstring(name);
-    int obreaks;
+    int obreaks, saveemulation ;
     struct funcstack fstack;
     static int funcdepth;
@@ -4223,6 +4223,7 @@ doshfunc(char *name, Eprog prog, LinkLis
      * not currently set.  That's because if it gets set in the    *
      * function we need to restore the original options on exit.   */
     memcpy(saveopts, opts, sizeof(opts));
+    saveemulation = emulation;

     if (flags & PM_TAGGED)
        opts[XTRACE] = 1;
@@ -4315,6 +4316,7 @@ doshfunc(char *name, Eprog prog, LinkLis
        saveopts[PRIVILEGED] = opts[PRIVILEGED];
        saveopts[RESTRICTED] = opts[RESTRICTED];
        memcpy(opts, saveopts, sizeof(opts));
+       emulation = saveemulation;
     } else {
        /* just restore a couple. */
        opts[XTRACE] = saveopts[XTRACE];

Attachment: signature.asc
Description: This is a digitally signed message part.

Messages sorted by: Reverse Date, Date, Thread, Author