aboutsummaryrefslogtreecommitdiff
path: root/compat/mingw.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2010-05-21 03:13:07 -0700
committerJunio C Hamano <gitster@pobox.com>2010-05-21 03:13:07 -0700
commit1be270cbdfd46a34fb8ce39ec31bb593137096fc (patch)
tree8a5add1291b6f53d82a36214adbdaefbbeac7881 /compat/mingw.c
parentc06ee3193e7873fde3525045e88c5741cefc91c4 (diff)
parentc8b296450e5148c576697ea4709072b7855aacd5 (diff)
downloadgit-1be270cbdfd46a34fb8ce39ec31bb593137096fc.tar.xz
Merge branch 'maint'
* maint: Fix checkout of large files to network shares on Windows XP start_command: close cmd->err descriptor when fork/spawn fails Fix "Out of memory? mmap failed" for files larger than 4GB on Windows
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 f90a114b02..9a8e336582 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -140,6 +140,23 @@ int mingw_open (const char *filename, int oflags, ...)
return fd;
}
+#undef write
+ssize_t mingw_write(int fd, const void *buf, size_t count)
+{
+ /*
+ * While write() calls to a file on a local disk are translated
+ * into WriteFile() calls with a maximum size of 64KB on Windows
+ * XP and 256KB on Vista, no such cap is placed on writes to
+ * files over the network on Windows XP. Unfortunately, there
+ * seems to be a limit of 32MB-28KB on X64 and 64MB-32KB on x86;
+ * bigger writes fail on Windows XP.
+ * So we cap to a nice 31MB here to avoid write failures over
+ * the net without changing the number of WriteFile() calls in
+ * the local case.
+ */
+ return write(fd, buf, min(count, 31 * 1024 * 1024));
+}
+
#undef fopen
FILE *mingw_fopen (const char *filename, const char *otype)
{