Hi Martijn, Martijn van Duren wrote on Fri, Aug 13, 2021 at 08:51:42AM +0200:
> So here's the first one: > - When -b is set, but followed by -w it doesn't remove the boring flag > and the -w is interpreted as a -b string I agree that can't be quite right. > - -c is defined as "This is an abbreviation for -w %c.", but adding a > -w option itself results in: > $ jot -cw"bla " 5 97 > bla a > bla b > bla c > bla d > bla e > > instead of > > $ jot -w"bla " 5 97 > bla 97 > bla 98 > bla 99 > bla 100 > bla 101 I agree that cannot be right either. It was even listed in my personal BUGS.txt file for the utility. > - -b always overwrites -c. That isnt necessarily wrong, ... > tb already agrees that these options should be mutually exlusive, so > here's the accompanying code. I choose to go for the last option wins > appraoch, similar to ls, df, du, ... ... but i agree "mutually exclusive, overriding" is potentially more useful. In this case, even though this is not a POSIX command, POSIX utility convention 12.2.11 is pertinent: The order of different options relative to one another should not matter, unless the options are documented as mutually-exclusive and such an option is documented to override any incompatible options preceding it. If an option that has option-arguments is repeated, the option and option-argument combinations should be interpreted in the order specified on the command line. In its current state, the program violates that. With your patch, it conforms. > Regress seems to pass. > > OK? OK schwarze@. Consider putting the declaration of "bool word" alongside the other "static bool" in file scope. I admit this one is only used in main, but so are finalnl, infinity, and randomize, and physicists like symmetry. I would prefer to keep the documentation of overriding together with each option, making it harder to overlook and even reducing the total amount of text. That is, append * "Overrides earlier -b, -c, and -w." to the -b and -w list entries * "Overrides earlier -b and -w." to the -c list entry. OK either way, though. Yours, Ingo > Index: jot.c > =================================================================== > RCS file: /cvs/src/usr.bin/jot/jot.c,v > retrieving revision 1.51 > diff -u -p -r1.51 jot.c > --- jot.c 30 Jul 2021 02:47:37 -0000 1.51 > +++ jot.c 13 Aug 2021 06:50:42 -0000 > @@ -86,6 +86,7 @@ main(int argc, char *argv[]) > int n = 0; > int ch; > const char *errstr; > + bool word; > > if (pledge("stdio", NULL) == -1) > err(1, "pledge"); > @@ -94,10 +95,13 @@ main(int argc, char *argv[]) > switch (ch) { > case 'b': > boring = true; > + chardata = word = false; > format = optarg; > break; > case 'c': > chardata = true; > + boring = word = false; > + format = ""; > break; > case 'n': > finalnl = false; > @@ -115,6 +119,8 @@ main(int argc, char *argv[]) > sepstring = optarg; > break; > case 'w': > + word = true; > + boring = chardata = false; > format = optarg; > break; > default: