#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 */
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");