From d0ebc75e7368cc4b1a8e504674feabc98f8fc5fd Mon Sep 17 00:00:00 2001
From: Antoine Pitrou <solipsis@pitrou.net>
Date: Sat, 15 Jan 2011 17:25:58 +0000
Subject: Fix mmap and test_mmap under Windows too (followup to r88022)

---
 Lib/test/test_mmap.py | 11 ++++++-----
 Modules/mmapmodule.c  |  1 +
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py
index c7b8d60..08b0714 100644
--- a/Lib/test/test_mmap.py
+++ b/Lib/test/test_mmap.py
@@ -325,13 +325,14 @@ class MmapTests(unittest.TestCase):
         # map length with an offset doesn't cause a segfault.
         if not hasattr(os, "stat"):
             self.skipTest("needs os.stat")
-        with open(TESTFN, "wb+") as f:
-            f.write(49152 * b'm') # Arbitrary character
+        # NOTE: allocation granularity is currently 65536 under Win64,
+        # and therefore the minimum offset alignment.
+        with open(TESTFN, "wb") as f:
+            f.write((65536 * 2) * b'm') # Arbitrary character
 
         with open(TESTFN, "rb") as f:
-            mf = mmap.mmap(f.fileno(), 0, offset=40960, access=mmap.ACCESS_READ)
-            self.assertRaises(IndexError, mf.__getitem__, 45000)
-            mf.close()
+            with mmap.mmap(f.fileno(), 0, offset=65536, access=mmap.ACCESS_READ) as mf:
+                self.assertRaises(IndexError, mf.__getitem__, 80000)
 
     def test_move(self):
         # make move works everywhere (64-bit format problem earlier)
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c
index ef026b2..f3b2f50 100644
--- a/Modules/mmapmodule.c
+++ b/Modules/mmapmodule.c
@@ -1300,6 +1300,7 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict)
             else
                 m_obj->size = low;
 #endif
+            m_obj->size -= offset;
         } else {
             m_obj->size = map_size;
         }
-- 
cgit v0.12

