Browse Source

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
maint
Junio C Hamano 9 years ago
parent
commit
de60b97422
  1. 17
      compat/mingw.c
  2. 3
      compat/mingw.h

17
compat/mingw.c

@ -394,6 +394,23 @@ int mingw_fflush(FILE *stream) @@ -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];

3
compat/mingw.h

@ -210,6 +210,9 @@ FILE *mingw_freopen (const char *filename, const char *otype, FILE *stream); @@ -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…
Cancel
Save