On Sun, Dec 04, 2022 at 03:19:18PM -0700, Todd C. Miller wrote:
> On Sun, 04 Dec 2022 15:58:22 -0600, Scott Cheloha wrote:
> 
> > On Mon, Dec 05, 2022 at 06:37:49AM +1000, David Gwynne wrote:
> > > On Sat, Dec 03, 2022 at 08:14:37PM -0600, Scott Cheloha wrote:
> > > > There are nearly a hundred vestigial question mark cases in the
> > > > top-level getopt(3) loops of various programs.  You know, this:
> > > > 
> > > >         switch (ch) {
> > > >         /* ... */
> > > >         case '?':
> > > >         default:
> > > >                 usage();
> > > >         }
> > > > 
> > > > All of them are redundant and can be handled by the "default" case,
> > > > which invariably fails the program.
> > > > 
> > > > This patch covers bin, games, regress, sbin, usr.bin, and usr.sbin.  I
> > > > excluded the csh(1)/ksh(1) builtins.  I also excluded nsd and unbound;
> > > > they don't look domestic.  gnu is also not domestic and is excluded.
> > > > 
> > > > ok?
> > > 
> > > mostly ok. can md5.c keep the switch statement and use default instead
> > > of case '?'? everything else looks good.
> >
> > md5 is an odd one.  There are two getopt(3) loops.  One for the -b
> > flag and a second loop for everything else.
> >
> > I think the switch statement in the first loop, the -b flag loop, is
> > misleading.  We're only looking for the -b flag in that loop, so why
> > do we have a switch statement?  The second loop handles unexpected
> > flags in the usual way.
> >
> > millert: any preferences?
> 
> The problem with replacing the switch() with an if() there is that
> "unknown option" warnings will be printed twice.  This can be avoided
> by making the option string start with a ':' for the first getopt()
> loop, which is how I originally fixed this (using an if() statement).
> It was changed to a switch() with the '?' label later on by sobrado@.
> 
> It is probably simplest to just do what dlg@ suggests and change
> the case '?' to default.

No, we can't do that, because then we usage() anything that isn't the
-b flag in the first loop.

I'm just going to leave md5.c as-is.

Sorry for the noise.

Reply via email to