+static void rep_ensuresize(void) {
+ /* Make an initial guess for the size of any single message fragment. */
+ if (partial_message_size == 0)
+ {
+ partial_message_size_used = 0;
+ partial_message_size = 2048;
+ partial_message = (char *)MALLOC (partial_message_size);
+ }
+ else
+ if (partial_message_size - partial_message_size_used < 1024)
+ {
+ partial_message_size += 2048;
+ partial_message = (char *)REALLOC (partial_message, partial_message_size);
+ }
+}
+
+#ifdef HAVE_STDARG_H
+static void report_vbuild(const char *message, va_list args)
+{
+ int n;
+
+ for ( ; ; )
+ {
+ /*
+ * args has to be initialized before every call of vsnprintf(),
+ * because vsnprintf() invokes va_arg macro and thus args is
+ * undefined after the call.
+ */
+ n = vsnprintf (partial_message + partial_message_size_used, partial_message_size - partial_message_size_used,
+ message, args);
+
+ /* output error, f. i. EILSEQ */
+ if (n < 0) break;
+
+ if (n >= 0
+ && (unsigned)n < partial_message_size - partial_message_size_used)
+ {
+ partial_message_size_used += n;
+ break;
+ }
+
+ partial_message_size += 2048;
+ partial_message = (char *)REALLOC (partial_message, partial_message_size);
+ }
+}
+#endif
+