Rev 36792 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
/* vsprintf with automatic memory allocation.Copyright (C) 2002-2004 Free Software Foundation, Inc.This program is free software; you can redistribute it and/or modify itunder the terms of the GNU Library General Public License as publishedby the Free Software Foundation; either version 2, or (at your option)any later version.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNULibrary General Public License for more details.You should have received a copy of the GNU Library General PublicLicense along with this program; if not, write to the Free SoftwareFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,USA. */#ifndef _VASNPRINTF_H#define _VASNPRINTF_H/* Get va_list. */#include <stdarg.h>/* Get size_t. */#include <stddef.h>#ifndef __attribute__/* This feature is available in gcc versions 2.5 and later. */# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__# define __attribute__(Spec) /* empty */# endif/* The __-protected variants of `format' and `printf' attributesare accepted by gcc versions 2.6.4 (effectively 2.7) and later. */# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)# define __format__ format# define __printf__ printf# endif#endif#ifdef __cplusplusextern "C" {#endif/* Write formatted output to a string dynamically allocated with malloc().You can pass a preallocated buffer for the result in RESULTBUF and itssize in *LENGTHP; otherwise you pass RESULTBUF = NULL.If successful, return the address of the string (this may be = RESULTBUFif no dynamic memory allocation was necessary) and set *LENGTHP to thenumber of resulting bytes, excluding the trailing NUL. Upon error, seterrno and return NULL.When dynamic memory allocation occurs, the preallocated buffer is leftalone (with possibly modified contents). This makes it possible to usea statically allocated or stack-allocated buffer, like this:char buf[100];size_t len = sizeof (buf);char *output = vasnprintf (buf, &len, format, args);if (output == NULL)... error handling ...;else{... use the output string ...;if (output != buf)free (output);}*/extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)__attribute__ ((__format__ (__printf__, 3, 4)));extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)__attribute__ ((__format__ (__printf__, 3, 0)));#ifdef __cplusplus}#endif#endif /* _VASNPRINTF_H */