Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 9 additions & 21 deletions Modules/mmapmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -806,20 +806,12 @@ mmap_mmap_size_impl(mmap_object *self)

#ifdef MS_WINDOWS
if (self->file_handle != INVALID_HANDLE_VALUE) {
DWORD low,high;
long long size;
low = GetFileSize(self->file_handle, &high);
if (low == INVALID_FILE_SIZE) {
/* It might be that the function appears to have failed,
when indeed its size equals INVALID_FILE_SIZE */
DWORD error = GetLastError();
if (error != NO_ERROR)
return PyErr_SetFromWindowsErr(error);
LARGE_INTEGER size;
if (!GetFileSizeEx(self->file_handle, &size)) {
DWORD error = GetLastError();
return PyErr_SetFromWindowsErr(error);
}
if (!high && low < LONG_MAX)
return PyLong_FromLong((long)low);
size = (((long long)high)<<32) + low;
return PyLong_FromLongLong(size);
return PyLong_FromLongLong(size.QuadPart);
}
#endif /* MS_WINDOWS */

Expand Down Expand Up @@ -2127,18 +2119,14 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict)
m_obj->file_handle = fh;
}
if (!map_size) {
DWORD low,high;
low = GetFileSize(fh, &high);
/* low might just happen to have the value INVALID_FILE_SIZE;
so we need to check the last error also. */
if (low == INVALID_FILE_SIZE &&
(dwErr = GetLastError()) != NO_ERROR)
LARGE_INTEGER li;
if (!GetFileSizeEx(fh, &li))
{
dwErr = GetLastError();
Py_DECREF(m_obj);
return PyErr_SetFromWindowsErr(dwErr);
}

size = (((long long) high) << 32) + low;
size = li.QuadPart;
if (size == 0) {
PyErr_SetString(PyExc_ValueError,
"cannot mmap an empty file");
Expand Down
Loading