(vasnprintf): Work around losing snprintf on e.g. HPUX 10.20.
authorJim Meyering <jim@meyering.net>
Sun, 19 Oct 2003 20:59:02 +0000 (20:59 +0000)
committerJim Meyering <jim@meyering.net>
Sun, 19 Oct 2003 20:59:02 +0000 (20:59 +0000)
lib/vasnprintf.c

index 9c701f1..f416c12 100644 (file)
@@ -707,6 +707,22 @@ vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
                            p[1] = '\0';
                            continue;
                          }
+                       else if (retcount < 0)
+                         {
+                           /* The system's snprintf is sorely deficient:
+                              it doesn't recognize the `%n' directive, and it
+                              returns -1 (rather than the length that would
+                              have been required) when the buffer is too small.
+                              This is the case at with least HPUX 10.20.
+                              Double the memory allocation.  */
+                           size_t n = allocated;
+                           if (n < 2 * allocated)
+                             {
+                               n = 2 * allocated;
+                               ENSURE_ALLOCATION (n);
+                               continue;
+                             }
+                         }
                        count = retcount;
                      }
 #endif