Hi, I've been trying to cleanup uClibc test-suite failures on ARC and when debugging test-double ran into a totally unrelated issue where it fails as | testing double (without inline functions) | Failure: finite (0): errno set to 11, expected 0 (unchanged) Turns out the test harness uses asprintf() which seems to be fudging errno causing test harness to erroneously declare failure: 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. +#define __STDIO_STREAM_CUSTOM_WRITE_FUNC(S, ARGS...) \ + if (__STDIO_STREAM_IS_CUSTOM((S))) { \ + _IO_cookie_file_t *cfile = (_IO_cookie_file_t *) (S); \ + if (cfile->__gcs.write == NULL) { \ + __set_errno(EINVAL); \ + return -1; \ + } \ + __set_errno(EAGAIN); \ + ssize_t w = cfile->__gcs.write(cfile->__cookie, ##ARGS); \ + return (w == 0 ? -1 : w); \ + } I don't understand all the logic but shouldn't it be set after __gcs.write() call ? Thx, -Vineet _______________________________________________ linux-snps-arc mailing list linux-snps-arc@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/linux-snps-arc