Mercurial > hg > octave-lojdl > gnulib-hg
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 |