comparison lib/vasnprintf.h @ 5297:c0fb011695d9

Add comment about preallocated buffer. Suggested by Simon Josefsson.
author Bruno Haible <bruno@clisp.org>
date Fri, 01 Oct 2004 20:42:15 +0000
parents e58a1c05a6ba
children a48fb0e98c8c
comparison
equal deleted inserted replaced
5296:41b2af35134e 5297:c0fb011695d9
1 /* vsprintf with automatic memory allocation. 1 /* vsprintf with automatic memory allocation.
2 Copyright (C) 2002-2003 Free Software Foundation, Inc. 2 Copyright (C) 2002-2004 Free Software Foundation, Inc.
3 3
4 This program is free software; you can redistribute it and/or modify 4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by 5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2, or (at your option) 6 the Free Software Foundation; either version 2, or (at your option)
7 any later version. 7 any later version.
45 You can pass a preallocated buffer for the result in RESULTBUF and its 45 You can pass a preallocated buffer for the result in RESULTBUF and its
46 size in *LENGTHP; otherwise you pass RESULTBUF = NULL. 46 size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
47 If successful, return the address of the string (this may be = RESULTBUF 47 If successful, return the address of the string (this may be = RESULTBUF
48 if no dynamic memory allocation was necessary) and set *LENGTHP to the 48 if no dynamic memory allocation was necessary) and set *LENGTHP to the
49 number of resulting bytes, excluding the trailing NUL. Upon error, set 49 number of resulting bytes, excluding the trailing NUL. Upon error, set
50 errno and return NULL. */ 50 errno and return NULL.
51
52 When dynamic memory allocation occurs, the preallocated buffer is left
53 alone (with possibly modified contents). This makes it possible to use
54 a statically allocated or stack-allocated buffer, like this:
55
56 char buf[100];
57 size_t len = sizeof (buf);
58 char *output = vasnprintf (buf, &len, format, args);
59 if (output == NULL)
60 ... error handling ...;
61 else
62 {
63 ... use the output string ...;
64 if (output != buf)
65 free (output);
66 }
67 */
51 extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) 68 extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
52 __attribute__ ((__format__ (__printf__, 3, 4))); 69 __attribute__ ((__format__ (__printf__, 3, 4)));
53 extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args) 70 extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
54 __attribute__ ((__format__ (__printf__, 3, 0))); 71 __attribute__ ((__format__ (__printf__, 3, 0)));
55 72