mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
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.
This commit is contained in:
parent
b8050697b8
commit
7b9fb92932
1 changed files with 12 additions and 3 deletions
|
@ -29,6 +29,7 @@
|
|||
#ifdef UNIX
|
||||
#include <unistd.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/stat.h>
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue