summaryrefslogtreecommitdiff
path: root/compat
diff options
context:
space:
mode:
authorIan McLean <ian.mclean@gmail.com>2010-05-20 18:57:51 (GMT)
committerJunio C Hamano <gitster@pobox.com>2010-05-20 23:11:06 (GMT)
commit60890cc60ccfc7000791a47f1f3d69fdb8884dd7 (patch)
tree3dd29923f4bbf988e53883eb65394e6490d47f66 /compat
parentcc24a1d809c75f0b6e5b1e56134b5127196bb2fb (diff)
downloadgit-60890cc60ccfc7000791a47f1f3d69fdb8884dd7.zip
git-60890cc60ccfc7000791a47f1f3d69fdb8884dd7.tar.gz
git-60890cc60ccfc7000791a47f1f3d69fdb8884dd7.tar.bz2
Fix "Out of memory? mmap failed" for files larger than 4GB on Windows
The git_mmap implementation was broken for file sizes that wouldn't fit into a size_t (32 bits). This was caused by intermediate variables that were only 32 bits wide when they should be 64 bits. Signed-off-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'compat')
-rw-r--r--compat/win32mmap.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/compat/win32mmap.c b/compat/win32mmap.c
index 1c5a149..b58aa69 100644
--- a/compat/win32mmap.c
+++ b/compat/win32mmap.c
@@ -4,19 +4,19 @@ void *git_mmap(void *start, size_t length, int prot, int flags, int fd, off_t of
{
HANDLE hmap;
void *temp;
- size_t len;
+ off_t len;
struct stat st;
uint64_t o = offset;
uint32_t l = o & 0xFFFFFFFF;
uint32_t h = (o >> 32) & 0xFFFFFFFF;
if (!fstat(fd, &st))
- len = xsize_t(st.st_size);
+ len = st.st_size;
else
die("mmap: could not determine filesize");
if ((length + offset) > len)
- length = len - offset;
+ length = xsize_t(len - offset);
if (!(flags & MAP_PRIVATE))
die("Invalid usage of mmap when built with USE_WIN32_MMAP");