mirror of https://github.com/python/cpython
Close #20656: Fix select.select() on OpenBSD 64-bit
This commit is contained in:
parent
5afffeab73
commit
5a8e5796f1
|
@ -212,11 +212,18 @@ select_select(PyObject *self, PyObject *args)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
#ifdef MS_WINDOWS
|
/* On OpenBSD 5.4, timeval.tv_sec is a long.
|
||||||
|
* Example: long is 64-bit, whereas time_t is 32-bit. */
|
||||||
time_t sec;
|
time_t sec;
|
||||||
if (_PyTime_ObjectToTimeval(tout, &sec, &tv.tv_usec,
|
/* On OS X 64-bit, timeval.tv_usec is an int (and thus still 4
|
||||||
|
bytes as required), but no longer defined by a long. */
|
||||||
|
long usec;
|
||||||
|
if (_PyTime_ObjectToTimeval(tout, &sec, &usec,
|
||||||
_PyTime_ROUND_UP) == -1)
|
_PyTime_ROUND_UP) == -1)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
#ifdef MS_WINDOWS
|
||||||
|
/* On Windows, timeval.tv_sec is a long (32 bit),
|
||||||
|
* whereas time_t can be 64-bit. */
|
||||||
assert(sizeof(tv.tv_sec) == sizeof(long));
|
assert(sizeof(tv.tv_sec) == sizeof(long));
|
||||||
#if SIZEOF_TIME_T > SIZEOF_LONG
|
#if SIZEOF_TIME_T > SIZEOF_LONG
|
||||||
if (sec > LONG_MAX) {
|
if (sec > LONG_MAX) {
|
||||||
|
@ -225,16 +232,11 @@ select_select(PyObject *self, PyObject *args)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
tv.tv_sec = (long)sec;
|
|
||||||
#else
|
#else
|
||||||
/* 64-bit OS X has struct timeval.tv_usec as an int (and thus still 4
|
assert(sizeof(tv.tv_sec) >= sizeof(sec));
|
||||||
bytes as required), but no longer defined by a long. */
|
|
||||||
long tv_usec;
|
|
||||||
if (_PyTime_ObjectToTimeval(tout, &tv.tv_sec, &tv_usec,
|
|
||||||
_PyTime_ROUND_UP) == -1)
|
|
||||||
return NULL;
|
|
||||||
tv.tv_usec = tv_usec;
|
|
||||||
#endif
|
#endif
|
||||||
|
tv.tv_sec = sec;
|
||||||
|
tv.tv_usec = usec;
|
||||||
if (tv.tv_sec < 0) {
|
if (tv.tv_sec < 0) {
|
||||||
PyErr_SetString(PyExc_ValueError, "timeout must be non-negative");
|
PyErr_SetString(PyExc_ValueError, "timeout must be non-negative");
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
Loading…
Reference in New Issue