Jim Meyering wrote: > Are you advocating support for non-POSIX malloc/realloc?
Sure. gnulib supports - to a large extent - mingw. It uses a malloc implementation from msvcrt.dll. This malloc does not set errno. > A *lot* of code expects malloc and realloc to set errno when they fail. Such code is not portable to plain ISO C 99 systems. A lot of code also expects malloc and realloc (and other library calls) to leave errno untouched when they succeed [1]. This is also wrong, even on POSIX systems. > Here are the two blocks of code you mention: > > *lineptr = (char *) realloc (*lineptr, 120); > if (*lineptr == NULL) > { > result = -1; > goto unlock_return; > } > ... > new_lineptr = (char *) realloc (*lineptr, needed); > if (new_lineptr == NULL) > { > result = -1; > goto unlock_return; > } > > in each case, realloc fails, so errno is defined. Errno is not defined in this case, on mingw. > unlock_return: > funlockfile (fp); > return result; > } > > Upon failure, on a system with the funlockfile function, > the errno value from a failed realloc may be clobbered > by that funlockfile call. Yes. Well spotted! Bruno [1] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7312