--- Modules/mmapmodule.c.~1~ 2008-12-17 01:45:59.000000000 -0800 +++ Modules/mmapmodule.c 2008-12-17 01:47:16.000000000 -0800 @@ -90,7 +90,7 @@ char * data; size_t size; size_t pos; /* relative to offset */ - size_t offset; + off_t offset; #ifdef MS_WINDOWS HANDLE map_handle; @@ -1078,7 +1078,8 @@ #endif mmap_object *m_obj; PyObject *map_size_obj = NULL, *offset_obj = NULL; - Py_ssize_t map_size, offset; + Py_ssize_t map_size; + off_t offset; int fd, flags = MAP_SHARED, prot = PROT_WRITE | PROT_READ; int devzero = -1; int access = (int)ACCESS_DEFAULT; @@ -1093,7 +1094,20 @@ map_size = _GetMapSize(map_size_obj, "size"); if (map_size < 0) return NULL; - offset = _GetMapSize(offset_obj, "offset"); + if (offset_obj == Py_None || offset_obj == NULL) { + offset = 0; + } + else { +#if !defined(HAVE_LARGEFILE_SUPPORT) + offset = PyInt_AsLong(offset_obj); +#else + offset = PyLong_Check(offset_obj) ? + PyLong_AsLongLong(offset_obj) : + PyInt_AsLong(offset_obj); +#endif + if (PyErr_Occurred()) + return NULL; + } if (offset < 0) return NULL; @@ -1136,7 +1150,7 @@ if (fd != -1 && fstat(fd, &st) == 0 && S_ISREG(st.st_mode)) { if (map_size == 0) { map_size = st.st_size; - } else if ((size_t)offset + (size_t)map_size > st.st_size) { + } else if (offset + map_size > st.st_size) { PyErr_SetString(PyExc_ValueError, "mmap length is greater than file size"); return NULL;