[Python-checkins] python/dist/src/Modules selectmodule.c,2.73,2.74
bcannon at users.sourceforge.net
bcannon at users.sourceforge.net
Wed Sep 10 13:37:45 EDT 2003
Update of /cvsroot/python/python/dist/src/Modules
In directory sc8-pr-cvs1:/tmp/cvs-serv12455/Modules
Modified Files:
selectmodule.c
Log Message:
select.select() now accepts a sequence (as defined by PySequence_Fast()) for
its first three arguments.
Closes RFE #798046 .
Index: selectmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/selectmodule.c,v
retrieving revision 2.73
retrieving revision 2.74
diff -C2 -d -r2.73 -r2.74
*** selectmodule.c 11 Feb 2003 17:18:58 -0000 2.73
--- selectmodule.c 10 Sep 2003 19:37:42 -0000 2.74
***************
*** 76,85 ****
*/
static int
! list2set(PyObject *list, fd_set *set, pylist fd2obj[FD_SETSIZE + 1])
{
int i;
int max = -1;
int index = 0;
! int len = PyList_Size(list);
PyObject* o = NULL;
--- 76,86 ----
*/
static int
! seq2set(PyObject *seq, fd_set *set, pylist fd2obj[FD_SETSIZE + 1])
{
int i;
int max = -1;
int index = 0;
! int len = -1;
! PyObject* fast_seq = NULL;
PyObject* o = NULL;
***************
*** 87,95 ****
FD_ZERO(set);
for (i = 0; i < len; i++) {
SOCKET v;
/* any intervening fileno() calls could decr this refcnt */
! if (!(o = PyList_GetItem(list, i)))
return -1;
--- 88,102 ----
FD_ZERO(set);
+ fast_seq=PySequence_Fast(seq, "arguments 1-3 must be sequences");
+ if (!fast_seq)
+ return -1;
+
+ len = PySequence_Fast_GET_SIZE(fast_seq);
+
for (i = 0; i < len; i++) {
SOCKET v;
/* any intervening fileno() calls could decr this refcnt */
! if (!(o = PySequence_Fast_GET_ITEM(fast_seq, i)))
return -1;
***************
*** 122,129 ****
--- 129,138 ----
fd2obj[++index].sentinel = -1;
}
+ Py_DECREF(fast_seq);
return max+1;
finally:
Py_XDECREF(o);
+ Py_DECREF(fast_seq);
return -1;
}
***************
*** 230,242 ****
}
- /* sanity check first three arguments */
- if (!PyList_Check(ifdlist) ||
- !PyList_Check(ofdlist) ||
- !PyList_Check(efdlist))
- {
- PyErr_SetString(PyExc_TypeError,
- "arguments 1-3 must be lists");
- return NULL;
- }
#ifdef SELECT_USES_HEAP
--- 239,242 ----
***************
*** 252,266 ****
}
#endif /* SELECT_USES_HEAP */
! /* Convert lists to fd_sets, and get maximum fd number
! * propagates the Python exception set in list2set()
*/
rfd2obj[0].sentinel = -1;
wfd2obj[0].sentinel = -1;
efd2obj[0].sentinel = -1;
! if ((imax=list2set(ifdlist, &ifdset, rfd2obj)) < 0)
goto finally;
! if ((omax=list2set(ofdlist, &ofdset, wfd2obj)) < 0)
goto finally;
! if ((emax=list2set(efdlist, &efdset, efd2obj)) < 0)
goto finally;
max = imax;
--- 252,266 ----
}
#endif /* SELECT_USES_HEAP */
! /* Convert sequences to fd_sets, and get maximum fd number
! * propagates the Python exception set in seq2set()
*/
rfd2obj[0].sentinel = -1;
wfd2obj[0].sentinel = -1;
efd2obj[0].sentinel = -1;
! if ((imax=seq2set(ifdlist, &ifdset, rfd2obj)) < 0)
goto finally;
! if ((omax=seq2set(ofdlist, &ofdset, wfd2obj)) < 0)
goto finally;
! if ((emax=seq2set(efdlist, &efdset, efd2obj)) < 0)
goto finally;
max = imax;
***************
*** 619,623 ****
\n\
Wait until one or more file descriptors are ready for some kind of I/O.\n\
! The first three arguments are lists of file descriptors to be waited for:\n\
rlist -- wait until ready for reading\n\
wlist -- wait until ready for writing\n\
--- 619,623 ----
\n\
Wait until one or more file descriptors are ready for some kind of I/O.\n\
! The first three arguments are sequences of file descriptors to be waited for:\n\
rlist -- wait until ready for reading\n\
wlist -- wait until ready for writing\n\
More information about the Python-checkins
mailing list