On Sun, Dec 10, 2017 at 03:29:51PM +0100, Theo Buehler wrote: > The printf(3) manual says that DOU are deprecated but are supposed to > behave the same way as ld, lo and lu.
I forgot to say that I found this while looking into the code coverage report by Sergey Bronnikov and found that these format strings aren't covered by our tests. One small comment below. > However: > $ jot -w '%ld' 5 -2 > -2 > -1 > 0 > 1 > 2 > $ jot -w '%D' 5 -2 > 4294967294 > 4294967295 > 0 > 1 > 2 > $ jot -w '%ld' 4 4294967294 > 4294967294 > 4294967295 > 4294967296 > 4294967297 > $ jot -w '%D' 4 4294967294 > jot: range error in conversion: 4294967294.000000 > > Similarly for %O and %U. > > This makes %{D,O,U} synonymous with %l{d,o,u}: > > Index: usr.bin/jot/jot.c > =================================================================== > RCS file: /var/cvs/src/usr.bin/jot/jot.c,v > retrieving revision 1.36 > diff -u -p -r1.36 jot.c > --- usr.bin/jot/jot.c 2 Sep 2016 14:23:09 -0000 1.36 > +++ usr.bin/jot/jot.c 10 Dec 2017 14:26:47 -0000 > @@ -420,12 +420,16 @@ getformat(void) > intdata = true; > break; > case 'D': > + /* %lD is undefined */ > if (!longdata) { > + longdata = true; /* %D behaves as %ld */ > intdata = true; > break; > } > case 'O': case 'U': > + /* %lO and %lU are undefined */ > if (!longdata) { > + longdata = true; /* %O, %U behave as %ld, %lu */ I'll change %ld into %lo in this comment before committing. > intdata = nosign = true; > break; > } >