vfprintf() string precision type

Bruce Evans brde at optusnet.com.au
Mon Sep 17 05:57:17 PDT 2007


On Sun, 16 Sep 2007, Sean C. Farley wrote:

> Xin LI noticed a warning in the code I wrote for setenv() where a
> precision was provided with a string argument to warnx() (really
> vfprintf()).  The warning appearing on amd64 and not i386 showed that
> precisions are always 32-bit.
>
> Would it be better to change the precision handling to expect size_t?

No.  This would be a large standards violation.

> My reasoning is that strlen() and sizeof both return size_t.  It makes a
> cast unnecessary for passing a value returned by either call as the
> precision.  Unfortunately, I could find nothing from SUSv3 that
> specified what type the precision could be.

>From n869.txt:
        [#5]  As  noted above, a field width, or precision, or both,
        may be indicated by an  asterisk.   In  this  case,  an  int
        argument   supplies  the  field  width  or  precision.   The

>From POSIX-2001 draft7.txt:
13174              A field width, or precision, or both, may be indicated by an asterisk ('*'). In this case an
13175              argument of type int supplies the field width or precision. Applications shall ensure that

>From printf.3:
A field width or precision, or both, may be indicated by
an asterisk
.Ql *
or an asterisk followed by one or more decimal digits and a
.Ql $
instead of a
digit string.
In this case, an
.Vt int
argument supplies the field width or precision.

Bruce


More information about the freebsd-standards mailing list