BUG/MEDIUM: tools: vsnprintf() is not always reliable on Solaris

Seen on Solaris 8, calling vsnprintf() with a null-size results
in the output size not being computed. This causes some random
behaviour including crashes when trying to display error messages
when loading an invalid configuration.
diff --git a/src/standard.c b/src/standard.c
index 37b3c43..adeb335 100644
--- a/src/standard.c
+++ b/src/standard.c
@@ -1900,13 +1900,21 @@
 		 * intermediate evaluations get wrong.
 		 */
 		va_start(args, format);
-		needed = vsnprintf(ret, allocated, format, args) + 1;
+		needed = vsnprintf(ret, allocated, format, args);
 		va_end(args);
 
-		if (needed <= allocated)
-			break;
+		if (needed < allocated) {
+			/* Note: on Solaris 8, the first iteration always
+			 * returns -1 if allocated is zero, so we force a
+			 * retry.
+			 */
+			if (!allocated)
+				needed = 0;
+			else
+				break;
+		}
 
-		allocated = needed;
+		allocated = needed + 1;
 		ret = realloc(ret, allocated);
 	} while (ret);