Didn't test, but reads ok to me, with minor nit below. On January 11, 2018 9:25:10 PM GMT+01:00, Theo Buehler <t...@theobuehler.org> wrote: >This aligns all cases vertically which makes them easier to find. > >Normalize all cases: if the long form is illegal or unsupported, >'goto fmt_broken;', then set the flags for the casts in putdata() on a >single line. > >This is all straightforward, but I think the resulting code is easier >to >follow. Of note is the case of '%c' which used to check whether intdata >is set. This is impossible, so I dropped that bit. > >Regression tests still happy. > >Index: jot.c >=================================================================== >RCS file: /var/cvs/src/usr.bin/jot/jot.c,v >retrieving revision 1.42 >diff -u -p -r1.42 jot.c >--- jot.c 11 Jan 2018 14:53:42 -0000 1.42 >+++ jot.c 11 Jan 2018 20:08:16 -0000 >@@ -398,38 +398,41 @@ getformat(void) > } > } > switch (*p) { >- case 'o': case 'u': case 'x': case 'X': >- intdata = nosign = true; >- break; >- case 'd': case 'i': >+ case 'd': >+ case 'i': > intdata = true; > break; >+ case 'o': >+ case 'u': >+ case 'x': >+ case 'X':
Convention is X before x in usage() and friends, so I guess that'd make sense here (and below) too. /Alexander >+ intdata = nosign = true; >+ break; > case 'D': >- /* %lD is undefined */ >- if (!longdata) { >- longdata = true; /* %D behaves as %ld */ >- intdata = true; >- break; >- } >- goto fmt_broken; >- case 'O': case 'U': >- /* %lO and %lU are undefined */ >- if (!longdata) { >- longdata = true; /* %O, %U behave as %lo, %lu */ >- intdata = nosign = true; >- break; >- } >- goto fmt_broken; >+ if (longdata) >+ goto fmt_broken; >+ longdata = intdata = true; /* same as %ld */ >+ break; >+ case 'O': >+ case 'U': >+ if (longdata) >+ goto fmt_broken; >+ longdata = intdata = nosign = true; /* same as %l[ou] */ >+ break; > case 'c': >- if (!(intdata | longdata)) { >- chardata = true; >- break; >- } >- goto fmt_broken; >- case 'f': case 'e': case 'g': case 'E': case 'G': >- if (!longdata) >- break; >- /* FALLTHROUGH */ >+ if (longdata) >+ goto fmt_broken; >+ chardata = true; >+ break; >+ case 'e': >+ case 'E': >+ case 'f': >+ case 'g': >+ case 'G': >+ if (longdata) >+ goto fmt_broken; >+ /* No cast needed for printing in putdata() */ >+ break; > default: > fmt_broken: > errx(1, "illegal or unsupported format '%.*s'",