@@ -439,6 +439,8 @@ typedef struct {
439
439
int poll_running ;
440
440
} pollObject ;
441
441
442
+ #define pollObject_CAST (op ) ((pollObject *)(op))
443
+
442
444
/* Update the malloc'ed array of pollfds to match the dictionary
443
445
contained within a pollObject. Return 1 on success, 0 on an error.
444
446
*/
@@ -772,11 +774,13 @@ newPollObject(PyObject *module)
772
774
}
773
775
774
776
static void
775
- poll_dealloc (pollObject * self )
777
+ poll_dealloc (PyObject * op )
776
778
{
777
- PyObject * type = (PyObject * )Py_TYPE (self );
778
- if (self -> ufds != NULL )
779
+ pollObject * self = pollObject_CAST (op );
780
+ PyTypeObject * type = Py_TYPE (self );
781
+ if (self -> ufds != NULL ) {
779
782
PyMem_Free (self -> ufds );
783
+ }
780
784
Py_XDECREF (self -> dict );
781
785
PyObject_Free (self );
782
786
Py_DECREF (type );
@@ -794,6 +798,8 @@ typedef struct {
794
798
struct pollfd * fds ;
795
799
} devpollObject ;
796
800
801
+ #define devpollObject_CAST (op ) ((devpollObject *)(op))
802
+
797
803
static PyObject *
798
804
devpoll_err_closed (void )
799
805
{
@@ -1086,13 +1092,14 @@ select_devpoll_close_impl(devpollObject *self)
1086
1092
Py_RETURN_NONE ;
1087
1093
}
1088
1094
1089
- static PyObject *
1090
- devpoll_get_closed (devpollObject * self , void * Py_UNUSED (ignored ))
1095
+ static PyObject *
1096
+ devpoll_get_closed (PyObject * op , void * Py_UNUSED (closure ))
1091
1097
{
1092
- if (self -> fd_devpoll < 0 )
1098
+ devpollObject * self = devpollObject_CAST (op );
1099
+ if (self -> fd_devpoll < 0 ) {
1093
1100
Py_RETURN_TRUE ;
1094
- else
1095
- Py_RETURN_FALSE ;
1101
+ }
1102
+ Py_RETURN_FALSE ;
1096
1103
}
1097
1104
1098
1105
/*[clinic input]
@@ -1112,7 +1119,7 @@ select_devpoll_fileno_impl(devpollObject *self)
1112
1119
}
1113
1120
1114
1121
static PyGetSetDef devpoll_getsetlist [] = {
1115
- {"closed" , ( getter ) devpoll_get_closed , NULL ,
1122
+ {"closed" , devpoll_get_closed , NULL ,
1116
1123
"True if the devpoll object is closed" },
1117
1124
{0 },
1118
1125
};
@@ -1163,9 +1170,10 @@ newDevPollObject(PyObject *module)
1163
1170
}
1164
1171
1165
1172
static void
1166
- devpoll_dealloc (devpollObject * self )
1173
+ devpoll_dealloc (PyObject * op )
1167
1174
{
1168
- PyObject * type = (PyObject * )Py_TYPE (self );
1175
+ devpollObject * self = devpollObject_CAST (op );
1176
+ PyTypeObject * type = Py_TYPE (self );
1169
1177
(void )devpoll_internal_close (self );
1170
1178
PyMem_Free (self -> fds );
1171
1179
PyObject_Free (self );
@@ -1275,6 +1283,8 @@ typedef struct {
1275
1283
SOCKET epfd ; /* epoll control file descriptor */
1276
1284
} pyEpoll_Object ;
1277
1285
1286
+ #define pyEpoll_Object_CAST (op ) ((pyEpoll_Object *)(op))
1287
+
1278
1288
static PyObject *
1279
1289
pyepoll_err_closed (void )
1280
1290
{
@@ -1377,13 +1387,14 @@ select_epoll_impl(PyTypeObject *type, int sizehint, int flags)
1377
1387
1378
1388
1379
1389
static void
1380
- pyepoll_dealloc (pyEpoll_Object * self )
1390
+ pyepoll_dealloc (PyObject * op )
1381
1391
{
1382
- PyTypeObject * type = Py_TYPE (self );
1392
+ pyEpoll_Object * self = pyEpoll_Object_CAST (op );
1393
+ PyTypeObject * type = Py_TYPE (self );
1383
1394
(void )pyepoll_internal_close (self );
1384
1395
freefunc epoll_free = PyType_GetSlot (type , Py_tp_free );
1385
- epoll_free (( PyObject * ) self );
1386
- Py_DECREF (( PyObject * ) type );
1396
+ epoll_free (self );
1397
+ Py_DECREF (type );
1387
1398
}
1388
1399
1389
1400
/*[clinic input]
@@ -1408,13 +1419,14 @@ select_epoll_close_impl(pyEpoll_Object *self)
1408
1419
}
1409
1420
1410
1421
1411
- static PyObject *
1412
- pyepoll_get_closed (pyEpoll_Object * self , void * Py_UNUSED (ignored ))
1422
+ static PyObject *
1423
+ pyepoll_get_closed (PyObject * op , void * Py_UNUSED (closure ))
1413
1424
{
1414
- if (self -> epfd < 0 )
1425
+ pyEpoll_Object * self = pyEpoll_Object_CAST (op );
1426
+ if (self -> epfd < 0 ) {
1415
1427
Py_RETURN_TRUE ;
1416
- else
1417
- Py_RETURN_FALSE ;
1428
+ }
1429
+ Py_RETURN_FALSE ;
1418
1430
}
1419
1431
1420
1432
/*[clinic input]
@@ -1707,7 +1719,7 @@ select_epoll___exit___impl(pyEpoll_Object *self, PyObject *exc_type,
1707
1719
}
1708
1720
1709
1721
static PyGetSetDef pyepoll_getsetlist [] = {
1710
- {"closed" , ( getter ) pyepoll_get_closed , NULL ,
1722
+ {"closed" , pyepoll_get_closed , NULL ,
1711
1723
"True if the epoll handler is closed" },
1712
1724
{0 },
1713
1725
};
@@ -1777,13 +1789,16 @@ typedef struct {
1777
1789
struct kevent e ;
1778
1790
} kqueue_event_Object ;
1779
1791
1780
- #define kqueue_event_Check (op , state ) (PyObject_TypeCheck((op), state->kqueue_event_Type))
1792
+ #define kqueue_event_Object_CAST (op ) ((kqueue_event_Object *)(op))
1793
+ #define kqueue_event_Check (op , state ) (PyObject_TypeCheck((op), state->kqueue_event_Type))
1781
1794
1782
1795
typedef struct kqueue_queue_Object {
1783
1796
PyObject_HEAD
1784
1797
SOCKET kqfd ; /* kqueue control fd */
1785
1798
} kqueue_queue_Object ;
1786
1799
1800
+ #define kqueue_queue_Object_CAST (op ) ((kqueue_queue_Object *)(op))
1801
+
1787
1802
#if (SIZEOF_UINTPTR_T != SIZEOF_VOID_P )
1788
1803
# error uintptr_t does not match void *!
1789
1804
#elif (SIZEOF_UINTPTR_T == SIZEOF_LONG_LONG )
@@ -1876,9 +1891,9 @@ static struct PyMemberDef kqueue_event_members[] = {
1876
1891
#undef KQ_OFF
1877
1892
1878
1893
static PyObject *
1879
-
1880
- kqueue_event_repr (kqueue_event_Object * s )
1894
+ kqueue_event_repr (PyObject * op )
1881
1895
{
1896
+ kqueue_event_Object * s = kqueue_event_Object_CAST (op );
1882
1897
return PyUnicode_FromFormat (
1883
1898
"<select.kevent ident=%zu filter=%d flags=0x%x fflags=0x%x "
1884
1899
"data=0x%llx udata=%p>" ,
@@ -1887,7 +1902,7 @@ kqueue_event_repr(kqueue_event_Object *s)
1887
1902
}
1888
1903
1889
1904
static int
1890
- kqueue_event_init (kqueue_event_Object * self , PyObject * args , PyObject * kwds )
1905
+ kqueue_event_init (PyObject * op , PyObject * args , PyObject * kwds )
1891
1906
{
1892
1907
PyObject * pfd ;
1893
1908
static char * kwlist [] = {"ident" , "filter" , "flags" , "fflags" ,
@@ -1896,11 +1911,14 @@ kqueue_event_init(kqueue_event_Object *self, PyObject *args, PyObject *kwds)
1896
1911
FILTER_FMT_UNIT FLAGS_FMT_UNIT FFLAGS_FMT_UNIT DATA_FMT_UNIT
1897
1912
UINTPTRT_FMT_UNIT ":kevent" ;
1898
1913
1914
+ kqueue_event_Object * self = kqueue_event_Object_CAST (op );
1899
1915
EV_SET (& (self -> e ), 0 , EVFILT_READ , EV_ADD , 0 , 0 , 0 ); /* defaults */
1900
1916
1901
1917
if (!PyArg_ParseTupleAndKeywords (args , kwds , fmt , kwlist ,
1902
- & pfd , & (self -> e .filter ), & (self -> e .flags ),
1903
- & (self -> e .fflags ), & (self -> e .data ), & (self -> e .udata ))) {
1918
+ & pfd , & (self -> e .filter ),
1919
+ & (self -> e .flags ), & (self -> e .fflags ),
1920
+ & (self -> e .data ), & (self -> e .udata )))
1921
+ {
1904
1922
return -1 ;
1905
1923
}
1906
1924
@@ -1917,15 +1935,16 @@ kqueue_event_init(kqueue_event_Object *self, PyObject *args, PyObject *kwds)
1917
1935
}
1918
1936
1919
1937
static PyObject *
1920
- kqueue_event_richcompare (kqueue_event_Object * s , kqueue_event_Object * o ,
1921
- int op )
1938
+ kqueue_event_richcompare (PyObject * lhs , PyObject * rhs , int op )
1922
1939
{
1923
1940
int result ;
1941
+ kqueue_event_Object * s = kqueue_event_Object_CAST (lhs );
1924
1942
_selectstate * state = _selectstate_by_type (Py_TYPE (s ));
1925
1943
1926
- if (!kqueue_event_Check (o , state )) {
1944
+ if (!kqueue_event_Check (rhs , state )) {
1927
1945
Py_RETURN_NOTIMPLEMENTED ;
1928
1946
}
1947
+ kqueue_event_Object * o = (kqueue_event_Object * )rhs ; // fast cast
1929
1948
1930
1949
#define CMP (a , b ) ((a) != (b)) ? ((a) < (b) ? -1 : 1)
1931
1950
result = CMP (s -> e .ident , o -> e .ident )
@@ -1965,8 +1984,8 @@ kqueue_queue_err_closed(void)
1965
1984
return NULL ;
1966
1985
}
1967
1986
1968
- static PyObject *
1969
- kqueue_tracking_after_fork (PyObject * module ) {
1987
+ static PyObject *
1988
+ kqueue_tracking_after_fork (PyObject * module , PyObject * Py_UNUSED ( dummy ) ) {
1970
1989
_selectstate * state = get_select_state (module );
1971
1990
_kqueue_list_item * item = state -> kqueue_open_list ;
1972
1991
state -> kqueue_open_list = NULL ;
@@ -1984,7 +2003,7 @@ kqueue_tracking_after_fork(PyObject *module) {
1984
2003
}
1985
2004
1986
2005
static PyMethodDef kqueue_tracking_after_fork_def = {
1987
- "kqueue_tracking_after_fork" , ( PyCFunction ) kqueue_tracking_after_fork ,
2006
+ "kqueue_tracking_after_fork" , kqueue_tracking_after_fork ,
1988
2007
METH_NOARGS , "Invalidate open select.kqueue objects after fork."
1989
2008
};
1990
2009
@@ -2173,10 +2192,11 @@ select_kqueue_impl(PyTypeObject *type)
2173
2192
}
2174
2193
2175
2194
static void
2176
- kqueue_queue_finalize (kqueue_queue_Object * self )
2195
+ kqueue_queue_finalize (PyObject * op )
2177
2196
{
2178
- PyObject * error = PyErr_GetRaisedException ();
2179
- kqueue_queue_internal_close (self );
2197
+ kqueue_queue_Object * self = kqueue_queue_Object_CAST (op );
2198
+ PyObject * error = PyErr_GetRaisedException ();
2199
+ (void )kqueue_queue_internal_close (self );
2180
2200
PyErr_SetRaisedException (error );
2181
2201
}
2182
2202
@@ -2201,13 +2221,14 @@ select_kqueue_close_impl(kqueue_queue_Object *self)
2201
2221
Py_RETURN_NONE ;
2202
2222
}
2203
2223
2204
- static PyObject *
2205
- kqueue_queue_get_closed (kqueue_queue_Object * self , void * Py_UNUSED (ignored ))
2224
+ static PyObject *
2225
+ kqueue_queue_get_closed (PyObject * op , void * Py_UNUSED (closure ))
2206
2226
{
2207
- if (self -> kqfd < 0 )
2227
+ kqueue_queue_Object * self = kqueue_queue_Object_CAST (op );
2228
+ if (self -> kqfd < 0 ) {
2208
2229
Py_RETURN_TRUE ;
2209
- else
2210
- Py_RETURN_FALSE ;
2230
+ }
2231
+ Py_RETURN_FALSE ;
2211
2232
}
2212
2233
2213
2234
/*[clinic input]
@@ -2414,7 +2435,7 @@ select_kqueue_control_impl(kqueue_queue_Object *self, PyObject *changelist,
2414
2435
}
2415
2436
2416
2437
static PyGetSetDef kqueue_queue_getsetlist [] = {
2417
- {"closed" , ( getter ) kqueue_queue_get_closed , NULL ,
2438
+ {"closed" , kqueue_queue_get_closed , NULL ,
2418
2439
"True if the kqueue handler is closed" },
2419
2440
{0 },
2420
2441
};
@@ -2588,10 +2609,10 @@ _select_clear(PyObject *module)
2588
2609
static void
2589
2610
_select_free (void * module )
2590
2611
{
2591
- _select_clear ((PyObject * )module );
2612
+ ( void ) _select_clear ((PyObject * )module );
2592
2613
}
2593
2614
2594
- int
2615
+ static int
2595
2616
_select_exec (PyObject * m )
2596
2617
{
2597
2618
_selectstate * state = get_select_state (m );
0 commit comments