Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 17 Sep 2007 18:49:00 -0500 (CDT)
From:      "Sean C. Farley" <scf@FreeBSD.org>
To:        Bruce Evans <brde@optusnet.com.au>
Cc:        Xin LI <delphij@FreeBSD.org>, freebsd-standards@FreeBSD.org
Subject:   Re: vfprintf() string precision type
Message-ID:  <alpine.BSF.0.9999.0709171835400.56227@thor.farley.org>
In-Reply-To: <20070917152627.V29498@delplex.bde.org>
References:  <alpine.BSF.0.9999.0709161922560.29967@thor.farley.org> <20070917152627.V29498@delplex.bde.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 17 Sep 2007, Bruce Evans wrote:

> 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.

This is why I asked.  The man page does not specifically state that the
type must be int.  At least in my head, "decimal digits" could be an
integer of any size in base 10.  The other quotes you give do specify
it.  Would it be acceptable to change the man page to state int type, so
I do not ask again after I inevitably forget?  :)

Personally, I prefer standards that agree with me.  :)  I will go fix my
code to remove the warning.  Thank you for the answer.

Sean
-- 
scf@FreeBSD.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.BSF.0.9999.0709171835400.56227>