X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=misc.c;h=9aff234b9fdde6c04527c2b79db32ef02e1122e4;hb=510f49e405e71ba5c97875e7a019364e1ef5fac9;hp=391ea1ba06eb86b7ecefa6e5a598a4447635e600;hpb=991d30412d0911e7727a852d0a00ae0f1bec1b3e;p=PuTTY.git diff --git a/misc.c b/misc.c index 391ea1ba..9aff234b 100644 --- a/misc.c +++ b/misc.c @@ -394,15 +394,19 @@ int toint(unsigned u) * directive we don't know about, we should panic and die rather * than run any risk. */ -static char *dupvprintf_inner(char *buf, int oldlen, int oldsize, +static char *dupvprintf_inner(char *buf, int oldlen, int *oldsize, const char *fmt, va_list ap) { - int len, size; + int len, size, newsize; - size = oldsize - oldlen; + assert(*oldsize >= oldlen); + size = *oldsize - oldlen; if (size == 0) { size = 512; - buf = sresize(buf, oldlen + size, char); + newsize = oldlen + size; + buf = sresize(buf, newsize, char); + } else { + newsize = *oldsize; } while (1) { @@ -430,6 +434,7 @@ static char *dupvprintf_inner(char *buf, int oldlen, int oldsize, if (len >= 0 && len < size) { /* This is the C99-specified criterion for snprintf to have * been completely successful. */ + *oldsize = newsize; return buf; } else if (len > 0) { /* This is the C99 error condition: the returned length is @@ -440,13 +445,15 @@ static char *dupvprintf_inner(char *buf, int oldlen, int oldsize, * buffer wasn't big enough, so we enlarge it a bit and hope. */ size += 512; } - buf = sresize(buf, oldlen + size, char); + newsize = oldlen + size; + buf = sresize(buf, newsize, char); } } char *dupvprintf(const char *fmt, va_list ap) { - return dupvprintf_inner(NULL, 0, 0, fmt, ap); + int size = 0; + return dupvprintf_inner(NULL, 0, &size, fmt, ap); } char *dupprintf(const char *fmt, ...) { @@ -488,7 +495,7 @@ char *strbuf_to_str(strbuf *buf) } void strbuf_catfv(strbuf *buf, const char *fmt, va_list ap) { - buf->s = dupvprintf_inner(buf->s, buf->len, buf->size, fmt, ap); + buf->s = dupvprintf_inner(buf->s, buf->len, &buf->size, fmt, ap); buf->len += strlen(buf->s + buf->len); } void strbuf_catf(strbuf *buf, const char *fmt, ...) @@ -1183,6 +1190,17 @@ char *buildinfo(const char *newline) strbuf_catf(buf, " (_MSC_VER=%d)", (int)_MSC_VER); #endif +#ifdef BUILDINFO_GTK + { + char *gtk_buildinfo = buildinfo_gtk_version(); + if (gtk_buildinfo) { + strbuf_catf(buf, "%sCompiled against GTK version %s", + newline, gtk_buildinfo); + sfree(gtk_buildinfo); + } + } +#endif + #ifdef NO_SECURITY strbuf_catf(buf, "%sBuild option: NO_SECURITY", newline); #endif