When reading from a non-blocking pipe whose buffer is empty, this function
fails with errno being set to EINVAL instead of EAGAIN on
some platforms:
mingw, MSVC 9.

Portability problems not fixed by Gnulib:

C99 and POSIX.1-2001 and later require end-of-file to be sticky, that
is, they require this function to act as if it reads end-of-file if
feof would return nonzero. However, on some systems this
function attempts to read from the underlying file descriptor even if
the stream’s end-of-file indicator is set. These systems include
glibc and default Solaris.

On Windows platforms (excluding Cygwin), this function does not set errno
upon failure.

This function crashes if the stream’s file descriptor has already been
closed, if MSVC_INVALID_PARAMETER_HANDLING is
HAIRY_LIBRARY_HANDLING or SANE_LIBRARY_HANDLING,
on some platforms:
MSVC 9.