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 EPIPEmaint
commit
de60b97422
|
@ -394,6 +394,23 @@ int mingw_fflush(FILE *stream)
|
||||||
return ret;
|
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)
|
int mingw_access(const char *filename, int mode)
|
||||||
{
|
{
|
||||||
wchar_t wfilename[MAX_PATH];
|
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);
|
int mingw_fflush(FILE *stream);
|
||||||
#define fflush mingw_fflush
|
#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);
|
int mingw_access(const char *filename, int mode);
|
||||||
#undef access
|
#undef access
|
||||||
#define access mingw_access
|
#define access mingw_access
|
||||||
|
|
Loading…
Reference in New Issue