diff options
| author | Michael Kerrisk <mtk.manpages@gmail.com> | 2010-11-11 05:53:39 +0100 |
|---|---|---|
| committer | Michael Kerrisk <mtk.manpages@gmail.com> | 2010-11-11 05:53:39 +0100 |
| commit | 6d678d7702ed28f67be24308e65a937e77ff3c91 (patch) | |
| tree | 8b485d54b55ab6b8ef9043397f88b97faaeaff3b /man3/printf.3 | |
| parent | c805532e4e646ed9b5d5534d9ed797aca16fec26 (diff) | |
| download | man-pages-6d678d7702ed28f67be24308e65a937e77ff3c91.tar.gz | |
printf.3: Formatting fixes in example code
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
Diffstat (limited to 'man3/printf.3')
| -rw-r--r-- | man3/printf.3 | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/man3/printf.3 b/man3/printf.3 index fc9456c166..720a8fff5c 100644 --- a/man3/printf.3 +++ b/man3/printf.3 @@ -1035,8 +1035,8 @@ To allocate a sufficiently large string and print into it char * make_message(const char *fmt, ...) { - /* Guess we need no more than 100 bytes. */ - int n, size = 100; + int n; + int size = 100; /* Guess we need no more than 100 bytes. */ char *p, *np; va_list ap; @@ -1044,18 +1044,25 @@ make_message(const char *fmt, ...) return NULL; while (1) { + /* Try to print in the allocated space. */ + va_start(ap, fmt); n = vsnprintf(p, size, fmt, ap); va_end(ap); + /* If that worked, return the string. */ + if (n > \-1 && n < size) return p; + /* Else try again with more space. */ + if (n > \-1) /* glibc 2.1 */ size = n+1; /* precisely what is needed */ else /* glibc 2.0 */ size *= 2; /* twice the old size */ + if ((np = realloc (p, size)) == NULL) { free(p); return NULL; |
