Subject: Re: Query about return value of snprintf
To: Chris G. Demetriou <cgd@netbsd.org>
From: Andreas Jaeger <aj@arthur.rhein-neckar.de>
List: tech-userlevel
Date: 06/18/1999 00:14:45
>>>>> Chris G Demetriou writes:

Chris> mcr@solidum.com writes:
>> The NetBSD man page says that we do:
>> 
>> These functions return the number of characters printed (not including
>> the trailing `\0' used to end output to strings).
>> 
>> Which is what I expected.

Chris> No, that's part of what it says.

Chris> Further it says:

Chris>      snprintf() and vsnprintf() will write at most size-1 of the characters
Chris>      printed into the output string (the size'th character then gets the ter-
Chris>      minating `\0'); if the return value is greater than or equal to the size
Chris>      argument, the string was too short and some of the printed characters
Chris>      were discarded.

Chris> i.e. it actually returns the number of characters that would have been
Chris> printed, given an adequately-sided buffer.


>> RETURN VALUE
>> If  the output was truncated, the return value is -1, oth-
>> erwise it is the number of characters stored, not  includ-
>> ing the terminating null.

Chris> I consider the BSD behaviour much preferred to what you quote as the
Chris> GNU libc behaviour.

I agree.  And since ISO C9x specifies this behaviour also, glibc has
been changed (see my other email).

Andreas
-- 
 Andreas Jaeger   aj@arthur.rhein-neckar.de    jaeger@informatik.uni-kl.de
  for pgp-key finger ajaeger@aixd1.rhrk.uni-kl.de