* Vineet Gupta:
Here's a simple test case which shows the problem:
#define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> #include <errno.h>
void main(void) { const char *this_func = "finite"; char *test_name;
errno = 0; if (asprintf (&test_name, "%s (%s)", this_func, "my-str") == -1) abort (); printf("%d\n", errno); // <-- prints 11
}
The errno unconditionally being set to EAGAIN seems to have been introduced in commit 568ceebf6adfc58c64a95133311268db6 ("Fix infinite loop when fopencookie custom write returns 0 on error") bakc in 2016.
For functions specified by standards, successful calls can alter errno unless specified otherwise. asprintf is not a standardized function, but it is reasonable to expect that a similar rule applies.