Simplify code for load_dynamic()

This commit is contained in:
Antoine Pitrou 2012-05-04 22:40:25 +02:00
parent 149e255e00
commit f3a42dee9a
1 changed files with 3 additions and 43 deletions

View File

@ -1964,48 +1964,6 @@ imp_is_frozen(PyObject *self, PyObject *args)
return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
}
static FILE *
get_file(PyObject *pathname, PyObject *fob, char *mode)
{
FILE *fp;
if (mode[0] == 'U')
mode = "r" PY_STDIOTEXTMODE;
if (fob == NULL) {
fp = _Py_fopen(pathname, mode);
if (!fp) {
if (!PyErr_Occurred())
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
}
return fp;
}
else {
int fd = PyObject_AsFileDescriptor(fob);
if (fd == -1)
return NULL;
if (!_PyVerify_fd(fd)) {
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
}
/* the FILE struct gets a new fd, so that it can be closed
* independently of the file descriptor given
*/
fd = dup(fd);
if (fd == -1) {
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
}
fp = fdopen(fd, mode);
if (!fp) {
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
}
return fp;
}
}
#ifdef HAVE_DYNAMIC_LOADING
static PyObject *
@ -2018,9 +1976,11 @@ imp_load_dynamic(PyObject *self, PyObject *args)
&name, PyUnicode_FSDecoder, &pathname, &fob))
return NULL;
if (fob != NULL) {
fp = get_file(NULL, fob, "r");
fp = _Py_fopen(pathname, "r");
if (fp == NULL) {
Py_DECREF(pathname);
if (!PyErr_Occurred())
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
}
}