Subject: Re: standards/32981: man page is wrong on return values of
To: None <standards-manager@netbsd.org, gnats-admin@netbsd.org,>
From: Johan Veenhuizen <veenhuizen@users.sourceforge.net>
List: netbsd-bugs
Date: 03/03/2006 23:55:01
The following reply was made to PR standards/32981; it has been noted by GNATS.

From: Johan Veenhuizen <veenhuizen@users.sourceforge.net>
To: christos@zoulas.com
Cc: standards-manager@netbsd.org, netbsd-bugs@netbsd.org,
	gnats-bugs@netbsd.org, gnats-admin@netbsd.org
Subject: Re: standards/32981: man page is wrong on return values of
 printf/fprintf/sprintf/etc.
Date: Sat, 04 Mar 2006 00:52:21 +0100

 christos@zoulas.com (Christos Zoulas) wrote:
 >
 >  On Mar 3, 10:05pm, veenhuizen@users.sourceforge.net (Johan Veenhuizen) wrote:
 >  -- Subject: standards/32981: man page is wrong on return values of printf/fpr
 >  
 >  | 	I have no copies of the C90/C99 standards in front of me,
 >  | 	but "The C Programming Language, 2nd Ed.", POSIX and SUS
 >  | 	document different return values for fprintf/sprintf/etc
 >  | 	than the NetBSD manual page.
 >  | 
 >  | 	I have no clue about asprintf and vasprintf.  Maybe their
 >  | 	return values should be changed as well, but they are not
 >  | 	standardised yet as far as I know.
 >  | 
 >  | >Fix:
 >  | 
 >  | Index: printf.3
 >  | ===================================================================
 >  | RCS file: /cvsroot/src/lib/libc/stdio/printf.3,v
 >  | retrieving revision 1.40
 >  | diff -u -r1.40 printf.3
 >  | --- printf.3	20 Jul 2005 13:31:15 -0000	1.40
 >  | +++ printf.3	3 Mar 2006 21:38:40 -0000
 >  | @@ -667,7 +667,7 @@
 >  |  and
 >  |  .Fn vfprintf
 >  |  return the number of characters printed.
 >  | -Otherwise \-1 is returned and
 >  | +Otherwise a negative value is returned and
 >  |  .Dv errno
 >  |  is set to indicate the error.
 >  |  .Pp
 >  
 >  ...
 >  
 >  Well -1 is negative (so we fulfill the requirement) and our implementation
 >  only returns -1, so our documentation is correct. Perhaps a note saying that
 >  conforming implementations are not required to return -1 and portable code
 >  should not depend on these functions returning -1, is appropriate instead.
 
 I agree with you that -1 is negative, so your implementation is
 certainly correct in this regard.  However, I disagree when you
 say that your documentation is correct.  The documentation is
 telling something that could *possibly* be told in a comment
 in the source code itself, but it does *not* inform you about the
 definition of the behaviour of printf so it doesn't belong
 in the manual page.
 
 In my opinion, it is a serious bug to even mention that the NetBSD
 implementation always returns -1 on errors.  There is simply no
 value in that information, and it can only lead to confusion and
 programmers writing unportable code.  It is such information
 that eventually destroys a standard.
 
 The code
 
 	if (printf("...", ...) == -1)
 		err(1, "stdout");
 
 is just plain wrong.  Period.  It depends on an implementation
 detail that can change at any time.  It's not even right on
 a NetBSD system.
 
 The code should implement what the documentation tells, not
 the other way around.
 
 Best regards,
 Johan
 
 P.S.
 Thanks for the commits.