From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18663 invoked from network); 7 Oct 1998 03:47:08 -0000 Received: from math.gatech.edu (list@130.207.146.50) by ns1.primenet.com.au with SMTP; 7 Oct 1998 03:47:08 -0000 Received: (from list@localhost) by math.gatech.edu (8.9.1/8.9.1) id XAA03918; Tue, 6 Oct 1998 23:40:46 -0400 (EDT) Resent-Date: Tue, 6 Oct 1998 23:40:46 -0400 (EDT) From: "Bart Schaefer" Message-Id: <981006204350.ZM9969@candle.brasslantern.com> Date: Tue, 6 Oct 1998 20:43:49 -0700 In-Reply-To: <9810061245.AA28058@ibmth.df.unipi.it> Comments: In reply to Peter Stephenson "Re: PATCH: 3.1.4: getopts: forget it." (Oct 6, 2:45pm) References: <9810061245.AA28058@ibmth.df.unipi.it> X-Mailer: Z-Mail (4.0b.820 20aug96) To: Peter Stephenson , zsh-workers@math.gatech.edu (Zsh hackers list) Subject: Re: PATCH: 3.1.4: getopts MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Resent-Message-ID: <"lV9R33.0.9z.-Ak6s"@math> Resent-From: zsh-workers@math.gatech.edu X-Mailing-List: archive/latest/4416 X-Loop: zsh-workers@math.gatech.edu Precedence: list Resent-Sender: zsh-workers-request@math.gatech.edu On Oct 6, 2:45pm, Peter Stephenson wrote: } Subject: Re: PATCH: 3.1.4: getopts: forget it. } } I spoke too soon. Bernd's patch that I referred to does fix the } problem, only more simply, so use that. It needs merging by hand. Is the following the correct merge? Index: Src/builtin.c =================================================================== *** builtin.c 1998/09/16 15:35:52 1.2 --- builtin.c 1998/10/07 03:37:08 *************** *** 2546,2552 **** char *optstr = unmetafy(*argv++, &lenoptstr), *var = *argv++; char **args = (*argv) ? argv : pparams; static int optcind = 0; ! char *str, optbuf[2], *p, opch; /* zoptind keeps count of the current argument number. The * * user can set it to zero to start a new option parse. */ --- 2546,2552 ---- char *optstr = unmetafy(*argv++, &lenoptstr), *var = *argv++; char **args = (*argv) ? argv : pparams; static int optcind = 0; ! char *str, optbuf[2] = " ", *p, opch; /* zoptind keeps count of the current argument number. The * * user can set it to zero to start a new option parse. */ *************** *** 2567,2576 **** /* find place in relevant argument */ str = unmetafy(dupstring(args[zoptind - 1]), &lenstr); if(optcind >= lenstr) { if(!args[zoptind++]) return 1; str = unmetafy(dupstring(args[zoptind - 1]), &lenstr); - optcind = 0; } if(!optcind) { if(lenstr < 2 || (*str != '-' && *str != '+')) --- 2567,2576 ---- /* find place in relevant argument */ str = unmetafy(dupstring(args[zoptind - 1]), &lenstr); if(optcind >= lenstr) { + optcind = 0; if(!args[zoptind++]) return 1; str = unmetafy(dupstring(args[zoptind - 1]), &lenstr); } if(!optcind) { if(lenstr < 2 || (*str != '-' && *str != '+')) *************** *** 2593,2605 **** if(opch == ':' || !(p = memchr(optstr, opch, lenoptstr))) { p = "?"; err: if(quiet) { setsparam(var, ztrdup(p)); - zsfree(zoptarg); zoptarg = metafy(optbuf, lenoptbuf, META_DUP); } else { zerr(*p == '?' ? "bad option: -%c" : "argument expected after -%c option", NULL, opch); errflag = 0; } return 0; --- 2593,2606 ---- if(opch == ':' || !(p = memchr(optstr, opch, lenoptstr))) { p = "?"; err: + zsfree(zoptarg); if(quiet) { setsparam(var, ztrdup(p)); zoptarg = metafy(optbuf, lenoptbuf, META_DUP); } else { zerr(*p == '?' ? "bad option: -%c" : "argument expected after -%c option", NULL, opch); + zoptarg=ztrdup(""); errflag = 0; } return 0; -- Bart Schaefer Brass Lantern Enterprises http://www.well.com/user/barts http://www.brasslantern.com