aboutsummaryrefslogtreecommitdiffstats
path: root/man3/printf.3
diff options
context:
space:
mode:
authorMichael Kerrisk <mtk.manpages@gmail.com>2010-11-11 05:53:39 +0100
committerMichael Kerrisk <mtk.manpages@gmail.com>2010-11-11 05:53:39 +0100
commit6d678d7702ed28f67be24308e65a937e77ff3c91 (patch)
tree8b485d54b55ab6b8ef9043397f88b97faaeaff3b /man3/printf.3
parentc805532e4e646ed9b5d5534d9ed797aca16fec26 (diff)
downloadman-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.311
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;