For my personal use and tail, I've arrived at:
if(argv[0] && argv[1] && (!argv[2] || !argv[3]) &&
(*argv[1] == '-' || *argv[1] == '+') &&
(*argv[1] != '-' || (*(argv[1] + 1) != 'c' && *(argv[1] + 1) != 'f' && *(argv[1] + 1) != 'r')) && (!argv[2] || *argv[2] != '-')) {
// V7-style parsing; goto getopt;s on format misuse
} else
getopt:
// normal getopt parsing
which allows the
tail ±[count][l|c|b][f|r] [file]
usage, so long as it wouldn't otherwise form a valid (or invalid)
standard tail invocation (incl. any of the arguments being --).
You could generalise this to more files but I don't think that's really
useful; skimming through the DCO corpus for "tail \+[0-9lcbfr]" shows
that the vast majority of legacy usages are in the form of tail +5
or tail +5c, with a few also passing a file.
This fully supports Mouse's and RVPs usages and unbreaks the standard
ones.
Attachment:
signature.asc
Description: PGP signature