Merge branch 'js/emu-write-epipe-on-windows'
The write(2) emulation for Windows learned to set errno to EPIPE when necessary. * js/emu-write-epipe-on-windows: mingw: emulate write(2) that fails with a EPIPE
This commit is contained in:
commit
de60b97422
@ -394,6 +394,23 @@ int mingw_fflush(FILE *stream)
|
||||
return ret;
|
||||
}
|
||||
|
||||
#undef write
|
||||
ssize_t mingw_write(int fd, const void *buf, size_t len)
|
||||
{
|
||||
ssize_t result = write(fd, buf, len);
|
||||
|
||||
if (result < 0 && errno == EINVAL && buf) {
|
||||
/* check if fd is a pipe */
|
||||
HANDLE h = (HANDLE) _get_osfhandle(fd);
|
||||
if (GetFileType(h) == FILE_TYPE_PIPE)
|
||||
errno = EPIPE;
|
||||
else
|
||||
errno = EINVAL;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
int mingw_access(const char *filename, int mode)
|
||||
{
|
||||
wchar_t wfilename[MAX_PATH];
|
||||
|
@ -210,6 +210,9 @@ FILE *mingw_freopen (const char *filename, const char *otype, FILE *stream);
|
||||
int mingw_fflush(FILE *stream);
|
||||
#define fflush mingw_fflush
|
||||
|
||||
ssize_t mingw_write(int fd, const void *buf, size_t len);
|
||||
#define write mingw_write
|
||||
|
||||
int mingw_access(const char *filename, int mode);
|
||||
#undef access
|
||||
#define access mingw_access
|
||||
|
Loading…
Reference in New Issue
Block a user