Commit f5f4edcb authored by Andrew M. Kuchling's avatar Andrew M. Kuchling

Use PyObject_AsFileDescriptor

parent 05b871c8
......@@ -1426,48 +1426,6 @@ FileHandler(ClientData clientData, int mask)
LEAVE_PYTHON
}
static int
GetFileNo(PyObject *file)
/* Either an int >= 0 or an object with a
*.fileno() method that returns an int >= 0
*/
{
PyObject *meth, *args, *res;
int id;
if (PyInt_Check(file)) {
id = PyInt_AsLong(file);
if (id < 0)
PyErr_SetString(PyExc_ValueError, "invalid file id");
return id;
}
args = PyTuple_New(0);
if (args == NULL)
return -1;
meth = PyObject_GetAttrString(file, "fileno");
if (meth == NULL) {
Py_DECREF(args);
return -1;
}
res = PyEval_CallObject(meth, args);
Py_DECREF(args);
Py_DECREF(meth);
if (res == NULL)
return -1;
if (PyInt_Check(res))
id = PyInt_AsLong(res);
else
id = -1;
if (id < 0)
PyErr_SetString(PyExc_ValueError,
"invalid fileno() return value");
Py_DECREF(res);
return id;
}
static PyObject *
Tkapp_CreateFileHandler(PyObject *self, PyObject *args)
/* args is (file, mask, func) */
......@@ -1478,7 +1436,7 @@ Tkapp_CreateFileHandler(PyObject *self, PyObject *args)
if (!PyArg_ParseTuple(args, "OiO:createfilehandler", &file, &mask, &func))
return NULL;
tfile = GetFileNo(file);
tfile = PyObject_AsFileDescriptor(file);
if (tfile < 0)
return NULL;
if (!PyCallable_Check(func)) {
......@@ -1506,7 +1464,7 @@ Tkapp_DeleteFileHandler(PyObject *self, PyObject *args)
if (!PyArg_ParseTuple(args, "O:deletefilehandler", &file))
return NULL;
tfile = GetFileNo(file);
tfile = PyObject_AsFileDescriptor(file);
if (tfile < 0)
return NULL;
......
......@@ -96,31 +96,9 @@ list2set(PyObject *list, fd_set *set, pylist fd2obj[FD_SETSIZE + 3])
return -1;
Py_INCREF(o);
v = PyObject_AsFileDescriptor( o );
if (v == -1) goto finally;
if (PyInt_Check(o)) {
v = PyInt_AsLong(o);
}
else if ((meth = PyObject_GetAttrString(o, "fileno")) != NULL)
{
PyObject *fno = PyEval_CallObject(meth, NULL);
Py_DECREF(meth);
if (fno == NULL)
goto finally;
if (!PyInt_Check(fno)) {
PyErr_SetString(PyExc_TypeError,
"fileno method returned a non-integer");
Py_DECREF(fno);
goto finally;
}
v = PyInt_AsLong(fno);
Py_DECREF(fno);
}
else {
PyErr_SetString(PyExc_TypeError,
"argument must be an int, or have a fileno() method.");
goto finally;
}
#if defined(_MSC_VER)
max = 0; /* not used for Win32 */
#else /* !_MSC_VER */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment