summaryrefslogtreecommitdiff
path: root/compat/mingw.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2015-12-22 14:45:16 -0800
committerJunio C Hamano <gitster@pobox.com>2015-12-22 14:45:16 -0800
commitde60b97422c87abf6ef4ba62bdc81f2671af405b (patch)
tree824180ef873723d30b55c958c4ffb72cd5044f17 /compat/mingw.c
parent6a4f2eced4036b7330742af91e8ea71e3c8b9803 (diff)
parent2b86292ed1756a66439f79ceda88dfc86a10dfa9 (diff)
downloadgit-de60b97422c87abf6ef4ba62bdc81f2671af405b.tar.gz
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
Diffstat (limited to 'compat/mingw.c')
-rw-r--r--compat/mingw.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/compat/mingw.c b/compat/mingw.c
index 90bdb1edde..5edea29508 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -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];