Fix for issue 365: "Out of memory? mmap failed"

The git_mmap implementation was broken for file sizes that
wouldn't fit into a size_t (32 bits).  Changed 'len' to be stored
in an off_t (64 bit) variable, and moved the xsize_t cast to only
occur when an attempt is made to map past the end-of-file.
This commit is contained in:
Ian McLean
2010-03-01 14:58:45 -05:00
committed by Johannes Schindelin
parent bf4f1068b8
commit ee59bcd37d

View File

@@ -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");