Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 05 Jan 2001 12:37:29 -0700
From:      Warner Losh <imp@harmony.village.org>
To:        Matt Dillon <dillon@earth.backplane.com>
Cc:        cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/usr.bin/apply apply.c 
Message-ID:  <200101051937.f05JbTb56229@harmony.village.org>
In-Reply-To: Your message of "Fri, 05 Jan 2001 11:18:23 PST." <200101051918.f05JINQ02516@earth.backplane.com> 
References:  <200101051918.f05JINQ02516@earth.backplane.com>  <jedgar@fxp.org> <200101050206.f0526rB87964@hak.lan.Awfulhak.org> <20010105162917.K85794@strontium.scientia.demon.co.uk> <20010105120633.B66833@peitho.fxp.org> <20010105184921.M85794@strontium.scientia.demon.co.uk> 

next in thread | previous in thread | raw e-mail | index | archive | help
In message <200101051918.f05JINQ02516@earth.backplane.com> Matt Dillon writes:
:     Yes, but not portably.  The ANSI standard tried to standardize it but
:     the reality is that only snprintf()'s return value is portable.  If you
:     try to use the return value from other functions as a count, your code
:     won't be portable.  asprintf() *might* be portable too, but nothing else.

At least ANSI-99 C (well, this is the publicly available last draft
before the standard) is fairly clear about snprintf (to answer an
earlier request in this thread):

       7.19.6.5  The snprintf function

       Synopsis

       [#1]

               #include <stdio.h>
               int snprintf(char * restrict s, size_t n,
                       const char * restrict format, ...);

       Description

       [#2]  The snprintf function is equivalent to fprintf, except
       that the output is  written  into  an  array  (specified  by
       argument  s) rather than to a stream.  If n is zero, nothing
       is written, and s may be a null pointer.  Otherwise,  output
       characters  beyond the n-1st are discarded rather than being
       written to the array, and a null character is written at the
       end  of  the characters actually written into the array.  If
       copying  takes  place  between  objects  that  overlap,  the
       behavior is undefined.

       Returns

       [#3]  The snprintf function returns the number of characters
       that would have been written had n been sufficiently  large,
       not  counting  the terminating null character, or a negative
       value if  an  encoding  error  occurred.   Thus,  the  null-
       terminated output has been completely written if and only if
       the returned value is nonnegative and less than n.

There is enough verbage in the C99 standard that defines the return
value of printf, et al, as the number of characters "transmitted" for
it to become portable in the coming years.  However, I've never much
found a use for this information, which is likely why it has taken so
long to get it good and standardized.

Warner


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




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