From owner-freebsd-standards@FreeBSD.ORG Mon Sep 17 23:49:05 2007 Return-Path: Delivered-To: freebsd-standards@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 73F4A16A419; Mon, 17 Sep 2007 23:49:05 +0000 (UTC) (envelope-from scf@FreeBSD.org) Received: from mail.farley.org (farley.org [67.64.95.201]) by mx1.freebsd.org (Postfix) with ESMTP id 224A713C458; Mon, 17 Sep 2007 23:49:05 +0000 (UTC) (envelope-from scf@FreeBSD.org) Received: from thor.farley.org (thor.farley.org [192.168.1.5]) by mail.farley.org (8.14.1/8.14.1) with ESMTP id l8HNn0L4023108; Mon, 17 Sep 2007 18:49:00 -0500 (CDT) (envelope-from scf@FreeBSD.org) Date: Mon, 17 Sep 2007 18:49:00 -0500 (CDT) From: "Sean C. Farley" To: Bruce Evans In-Reply-To: <20070917152627.V29498@delplex.bde.org> Message-ID: References: <20070917152627.V29498@delplex.bde.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Spam-Status: No, score=-4.4 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.2.3 X-Spam-Checker-Version: SpamAssassin 3.2.3 (2007-08-08) on mail.farley.org Cc: Xin LI , freebsd-standards@FreeBSD.org Subject: Re: vfprintf() string precision type X-BeenThere: freebsd-standards@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Standards compliance List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 Sep 2007 23:49:05 -0000 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