gh-132987: Support __index__() in the select.kqueue_event constructor (GH-133094)

This commit is contained in:
Serhiy Storchaka 2025-04-29 16:55:14 +03:00 committed by GitHub
parent 0fb4c38c27
commit d2d490064d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1922,14 +1922,27 @@ kqueue_event_init(PyObject *op, PyObject *args, PyObject *kwds)
return -1;
}
if (PyLong_Check(pfd)) {
self->e.ident = PyLong_AsSize_t(pfd);
if (PyIndex_Check(pfd)) {
Py_ssize_t bytes = PyLong_AsNativeBytes(pfd,
&self->e.ident, sizeof(self->e.ident),
Py_ASNATIVEBYTES_NATIVE_ENDIAN |
Py_ASNATIVEBYTES_ALLOW_INDEX |
Py_ASNATIVEBYTES_REJECT_NEGATIVE |
Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
if (bytes < 0) {
return -1;
}
if ((size_t)bytes > sizeof(self->e.ident)) {
PyErr_SetString(PyExc_OverflowError,
"Python int too large for C kqueue event identifier");
return -1;
}
}
else {
self->e.ident = PyObject_AsFileDescriptor(pfd);
}
if (PyErr_Occurred()) {
return -1;
if (PyErr_Occurred()) {
return -1;
}
}
return 0;
}