Skip to content

Commit

Permalink
Merge branch 'js/emu-write-epipe-on-windows'
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Junio C Hamano committed Dec 22, 2015
2 parents 6a4f2ec + 2b86292 commit de60b97
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
17 changes: 17 additions & 0 deletions compat/mingw.c
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down
3 changes: 3 additions & 0 deletions compat/mingw.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit de60b97

Please sign in to comment.