* 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.