+2004-10-07 Bruno Haible <bruno@clisp.org>
+
+ * snprintf.c (snprintf): Avoid a memory allocation if the result fits
+ into the provided buffer.
+
2004-10-06 Paul Eggert <eggert@cs.ucla.edu>
* diacrit.c, diacrit.h: Add GPL notice.
va_list args;
va_start (args, format);
- output = vasnprintf (NULL, &len, format, args);
+ len = size;
+ output = vasnprintf (str, &len, format, args);
va_end (args);
if (!output)
return -1;
- if (str && size > 0)
- {
- memcpy (str, output, MIN (len + 1, size));
+ if (str != NULL)
+ if (len > size - 1) /* equivalent to: (size > 0 && len >= size) */
str[size - 1] = '\0';
- }
- free (output);
+ if (output != str)
+ free (output);
return len;
}