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.