static PyObject * mmap_size_method(mmap_object *self, PyObject *unused) { CHECK_VALID(NULL); #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); } if (!high && low < LONG_MAX) return PyLong_FromLong((long)low); size = (((long long)high)<<32) + low; return PyLong_FromLongLong(size); } else { return PyLong_FromSsize_t(self->size); } #endif /* MS_WINDOWS */ #ifdef UNIX { struct _Py_stat_struct status; if (_Py_fstat(self->fd, &status) == -1) return NULL; #ifdef HAVE_LARGEFILE_SUPPORT return PyLong_FromLongLong(status.st_size); #else return PyLong_FromLong(status.st_size); #endif } #endif /* UNIX */ }
dl_funcptr _PyImport_FindSharedFuncptr(const char *prefix, const char *shortname, const char *pathname, FILE *fp) { dl_funcptr p; void *handle; char funcname[258]; char pathbuf[260]; int dlopenflags=0; if (strchr(pathname, '/') == NULL) { /* Prefix bare filename with "./" */ PyOS_snprintf(pathbuf, sizeof(pathbuf), "./%-.255s", pathname); pathname = pathbuf; } PyOS_snprintf(funcname, sizeof(funcname), LEAD_UNDERSCORE "%.20s_%.200s", prefix, shortname); if (fp != NULL) { int i; struct _Py_stat_struct status; if (_Py_fstat(fileno(fp), &status) == -1) return NULL; for (i = 0; i < nhandles; i++) { if (status.st_dev == handles[i].dev && status.st_ino == handles[i].ino) { p = (dl_funcptr) dlsym(handles[i].handle, funcname); return p; } } if (nhandles < 128) { handles[nhandles].dev = status.st_dev; handles[nhandles].ino = status.st_ino; } } dlopenflags = PyThreadState_GET()->interp->dlopenflags; handle = dlopen(pathname, dlopenflags); if (handle == NULL) { PyObject *mod_name; PyObject *path; PyObject *error_ob; const char *error = dlerror(); if (error == NULL) error = "unknown dlopen() error"; error_ob = PyUnicode_FromString(error); if (error_ob == NULL) return NULL; mod_name = PyUnicode_FromString(shortname); if (mod_name == NULL) { Py_DECREF(error_ob); return NULL; } path = PyUnicode_FromString(pathname); if (path == NULL) { Py_DECREF(error_ob); Py_DECREF(mod_name); return NULL; } PyErr_SetImportError(error_ob, mod_name, path); Py_DECREF(error_ob); Py_DECREF(mod_name); Py_DECREF(path); return NULL; } if (fp != NULL && nhandles < 128) handles[nhandles++].handle = handle; p = (dl_funcptr) dlsym(handle, funcname); return p; }