From: Jim Meyering Date: Sun, 19 Oct 2003 20:59:02 +0000 (+0000) Subject: (vasnprintf): Work around losing snprintf on e.g. HPUX 10.20. X-Git-Tag: v5.1.0~316 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fd1e5aba83ef2efb0a9c5b5d5eeddb3533266ccb;p=thirdparty%2Fcoreutils.git (vasnprintf): Work around losing snprintf on e.g. HPUX 10.20. --- diff --git a/lib/vasnprintf.c b/lib/vasnprintf.c index 9c701f1c61..f416c1240c 100644 --- a/lib/vasnprintf.c +++ b/lib/vasnprintf.c @@ -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