mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Use PyObject_AsFileDescriptor
This commit is contained in:
parent
8c46b30e0a
commit
9f28a039f6
2 changed files with 4 additions and 68 deletions
|
@ -1426,48 +1426,6 @@ FileHandler(ClientData clientData, int mask)
|
||||||
LEAVE_PYTHON
|
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 *
|
static PyObject *
|
||||||
Tkapp_CreateFileHandler(PyObject *self, PyObject *args)
|
Tkapp_CreateFileHandler(PyObject *self, PyObject *args)
|
||||||
/* args is (file, mask, func) */
|
/* args is (file, mask, func) */
|
||||||
|
@ -1478,7 +1436,7 @@ Tkapp_CreateFileHandler(PyObject *self, PyObject *args)
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "OiO:createfilehandler", &file, &mask, &func))
|
if (!PyArg_ParseTuple(args, "OiO:createfilehandler", &file, &mask, &func))
|
||||||
return NULL;
|
return NULL;
|
||||||
tfile = GetFileNo(file);
|
tfile = PyObject_AsFileDescriptor(file);
|
||||||
if (tfile < 0)
|
if (tfile < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (!PyCallable_Check(func)) {
|
if (!PyCallable_Check(func)) {
|
||||||
|
@ -1506,7 +1464,7 @@ Tkapp_DeleteFileHandler(PyObject *self, PyObject *args)
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "O:deletefilehandler", &file))
|
if (!PyArg_ParseTuple(args, "O:deletefilehandler", &file))
|
||||||
return NULL;
|
return NULL;
|
||||||
tfile = GetFileNo(file);
|
tfile = PyObject_AsFileDescriptor(file);
|
||||||
if (tfile < 0)
|
if (tfile < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
|
@ -96,31 +96,9 @@ list2set(PyObject *list, fd_set *set, pylist fd2obj[FD_SETSIZE + 3])
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
Py_INCREF(o);
|
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)
|
#if defined(_MSC_VER)
|
||||||
max = 0; /* not used for Win32 */
|
max = 0; /* not used for Win32 */
|
||||||
#else /* !_MSC_VER */
|
#else /* !_MSC_VER */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue