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