From 7b9fb92932ff1d501229263a69a4434558b0271d Mon Sep 17 00:00:00 2001 From: "Andrew M. Kuchling" Date: Sat, 17 Jun 2000 22:41:22 +0000 Subject: [PATCH] Fix the size() method to return the size of the file on Unix, not the size of the mapped area. This seems to be what the Windows version does. This change requires keeping around the fd of the mapped file. --- Modules/mmapmodule.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index 1f5e19a5e69..4bfcb21889f 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -29,6 +29,7 @@ #ifdef UNIX #include #include +#include #endif #include @@ -49,7 +50,7 @@ typedef struct { #endif #ifdef UNIX - /* No Unix-specific information at this point in time */ + int fd; #endif } mmap_object; @@ -210,7 +211,7 @@ mmap_find_method (mmap_object *self, static PyObject * mmap_write_method (mmap_object * self, - PyObject * args) + PyObject * args) { long length; char * data; @@ -264,7 +265,14 @@ mmap_size_method (mmap_object * self, #endif /* MS_WIN32 */ #ifdef UNIX - return (Py_BuildValue ("l", self->size) ); + { + struct stat buf; + if (-1 == fstat(self->fd, &buf)) { + PyErr_SetFromErrno(mmap_module_error); + return NULL; + } + return (Py_BuildValue ("l", buf.st_size) ); + } #endif /* UNIX */ } @@ -717,6 +725,7 @@ new_mmap_object (PyObject * self, PyObject * args, PyObject *kwdict) if (m_obj == NULL) {return NULL;} m_obj->size = (size_t) map_size; m_obj->pos = (size_t) 0; + m_obj->fd = fd; m_obj->data = mmap(NULL, map_size, prot, flags, fd, 0);