From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14509 invoked from network); 25 Sep 2000 16:42:18 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 25 Sep 2000 16:42:18 -0000 Received: (qmail 14855 invoked by alias); 25 Sep 2000 16:41:11 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 12862 Received: (qmail 14833 invoked from network); 25 Sep 2000 16:41:09 -0000 From: "Bart Schaefer" Message-Id: <1000925164052.ZM11699@candle.brasslantern.com> Date: Mon, 25 Sep 2000 16:40:52 +0000 X-Mailer: Z-Mail (5.0.0 30July97) To: zsh-workers@sunsite.auc.dk Subject: PATCH: Parameter STTY should work as documented MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii STTY If this parameter is set in a command's environment, the shell runs the stty command with the value of this parameter as arguments in order to set up the terminal before executing the command. [...] STTY is ignored if the command is run in the background, or if it is in the environment of the shell but not explicitly assigned to in the input line. This avoids running stty at every external command by accidentally exporting it. [...] A patch for 3.0.8 will go up on the SourceForge patch manager soon. Index: Src/exec.c =================================================================== @@ -133,6 +133,7 @@ static LinkList args; static int doneps4; +static char *STTYval; /* Execution functions. */ @@ -444,7 +445,6 @@ execute(Cmdnam not_used_yet, int dash) { Cmdnam cn; - static LinkList exargs; char buf[MAXCMDLEN], buf2[MAXCMDLEN]; char *s, *z, *arg0; char **argv, **pp; @@ -459,17 +459,19 @@ /* If the parameter STTY is set in the command's environment, * * we first run the stty command with the value of this * * parameter as it arguments. */ - if (!exargs && (s = zgetenv("STTY")) && isatty(0) && - (GETPGRP() == getpid())) { - char *t; + if ((s = STTYval) && isatty(0) && (GETPGRP() == getpid())) { + LinkList exargs = args; + char *t = tricat("stty", " ", s); - exargs = args; /* this prevents infinite recursion */ + STTYval = 0; /* this prevents infinite recursion */ + zsfree(s); args = NULL; - t = tricat("stty", " ", s); execstring(t, 1, 0); zsfree(t); args = exargs; - exargs = NULL; + } else if (s) { + STTYval = 0; + zsfree(s); } cn = (Cmdnam) cmdnamtab->getnode(cmdnamtab, arg0); @@ -1537,6 +1539,10 @@ state->pc = opc; return; } + if (strcmp(name, "STTY") == 0) { + zsfree(STTYval); + STTYval = ztrdup(val); + } allexp = opts[ALLEXPORT]; opts[ALLEXPORT] = 1; pm = setsparam(name, val); @@ -2326,6 +2332,10 @@ if (!forked) setlimits(NULL); #endif + if (how & Z_ASYNC) { + zsfree(STTYval); + STTYval = 0; + } execute((Cmdnam) hn, cflags & BINF_DASH); } else { /* ( ... ) */ DPUTS(varspc, -- Bart Schaefer Brass Lantern Enterprises http://www.well.com/user/barts http://www.brasslantern.com Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net