Bruno Haible <address@hidden> writes: > Since asprintf() and vasprintf() are not specified to set errno in case > of failure - neither in our vasprintf.h nor in glibc's documentation - > you don't need to care about EOVERFLOW. Shouldn't asprintf and vasprintf be consistent with snprintf? snprintf is defined by POSIX to set errno to EOVERFLOW in this case. Also, I don't see why vasprintf should leave errno undefined for this particular failure. vasprintf sets errno to a useful value in all other failures; why should this case be different? Code that invokes vasprintf and asprintf should be able to diagnose errors properly. Perhaps glibc's documentation and behavior need to be changed to reflect this; but let's start with gnulib. I looked into EOVERFLOW a bit more, and the usual practice in gnulib (e.g. poll.c, c-stack.c) is to substitute EINVAL for EOVERFLOW if EOVERFLOW is not available. So, how about this further patch? 2003-10-30 Paul Eggert <address@hidden> * vasprintf.c: Include <errno.h>. (EOVERFLOW): Define to EINVAL if not defined. (vasprintf): Set errno to EOVERFLOW on integer overflow. Index: vasprintf.c =================================================================== RCS file: /cvsroot/gnulib/gnulib/lib/vasprintf.c,v retrieving revision 1.3 diff -p -u -r1.3 vasprintf.c --- vasprintf.c 30 Oct 2003 14:09:04 -0000 1.3 +++ vasprintf.c 30 Oct 2003 18:58:41 -0000 @@ -25,6 +25,11 @@ #include <limits.h> #include <stdlib.h> +#include <errno.h> +#ifndef EOVERFLOW +# define EOVERFLOW EINVAL +#endif + #include "vasnprintf.h" int @@ -39,6 +44,7 @@ vasprintf (char **resultp, const char *f /* We could produce such a big string, but can't return its length as an 'int'. */ free (result); + errno = EOVERFLOW; return -1; }