+2010-04-24 Bruno Haible <bruno@clisp.org>
+
+ vasnprintf: Correct errno value in case of out-of-memory.
+ * lib/vasnprintf.c (VASNPRINTF): Set errno to 0 before calling SNPRINTF
+ or sprintf. Use the errno value from SNPRINTF or sprintf.
+ Reported by Ian Beckwith <ianb@erislabs.net>.
+
2010-04-24 Bruno Haible <bruno@clisp.org>
ansi-c++-opt: Find correct compiler when cross-compiling.
}
#endif
+ errno = 0;
switch (type)
{
case TYPE_SCHAR:
/* Attempt to handle failure. */
if (count < 0)
{
+ /* SNPRINTF or sprintf failed. Save and use the errno
+ that it has set, if any. */
+ int saved_errno = errno;
+
if (!(result == resultbuf || result == NULL))
free (result);
if (buf_malloced != NULL)
free (buf_malloced);
CLEANUP ();
errno =
- (dp->conversion == 'c' || dp->conversion == 's'
- ? EILSEQ
- : EINVAL);
+ (saved_errno != 0
+ ? saved_errno
+ : (dp->conversion == 'c' || dp->conversion == 's'
+ ? EILSEQ
+ : EINVAL));
return NULL;
}