6868# include "emscripten.h" // emscripten_debugger()
6969#endif
7070
71+ #ifdef HAVE_SYS_RANDOM_H
72+ # include <sys/random.h>
73+ #endif
74+
7175#ifdef HAVE_SYS_UIO_H
7276# include <sys/uio.h>
7377#endif
@@ -10810,8 +10814,9 @@ os_wait_impl(PyObject *module)
1081010814
1081110815
1081210816// This system call always crashes on older Android versions.
10813- #if defined(__linux__) && defined(__NR_pidfd_open) && \
10814- !(defined(__ANDROID__) && __ANDROID_API__ < 31)
10817+ #if defined(HAVE_PIDFD_OPEN) \
10818+ || (defined(__linux__) && defined(__NR_pidfd_open) \
10819+ && !(defined(__ANDROID__) && __ANDROID_API__ < 31))
1081510820/*[clinic input]
1081610821os.pidfd_open
1081710822 pid: pid_t
@@ -10827,7 +10832,11 @@ static PyObject *
1082710832os_pidfd_open_impl(PyObject *module, pid_t pid, unsigned int flags)
1082810833/*[clinic end generated code: output=5c7252698947dc41 input=03058b32c389f874]*/
1082910834{
10835+ #ifdef HAVE_PIDFD_OPEN
10836+ int fd = pidfd_open(pid, flags);
10837+ #else
1083010838 int fd = syscall(__NR_pidfd_open, pid, flags);
10839+ #endif
1083110840 if (fd < 0) {
1083210841 return posix_error();
1083310842 }
@@ -10836,8 +10845,9 @@ os_pidfd_open_impl(PyObject *module, pid_t pid, unsigned int flags)
1083610845#endif
1083710846
1083810847
10839- #if defined(__linux__) && defined(__NR_pidfd_getfd) && \
10840- !(defined(__ANDROID__) && __ANDROID_API__ < 31)
10848+ #if defined(HAVE_PIDFD_GETFD) \
10849+ || (defined(__linux__) && defined(__NR_pidfd_getfd) \
10850+ && !(defined(__ANDROID__) && __ANDROID_API__ < 31))
1084110851/*[clinic input]
1084210852os.pidfd_getfd
1084310853 pidfd: int
@@ -10856,7 +10866,11 @@ os_pidfd_getfd_impl(PyObject *module, int pidfd, int targetfd,
1085610866 unsigned int flags)
1085710867/*[clinic end generated code: output=e1a1415a13c7137f input=ef6417fb10deb1cc]*/
1085810868{
10869+ #ifdef HAVE_PIDFD_GETFD
10870+ int fd = pidfd_getfd(pidfd, targetfd, flags);
10871+ #else
1085910872 int fd = syscall(__NR_pidfd_getfd, pidfd, targetfd, flags);
10873+ #endif
1086010874 if (fd < 0) {
1086110875 return posix_error();
1086210876 }
@@ -17369,7 +17383,7 @@ os_fspath_impl(PyObject *module, PyObject *path)
1736917383 return PyOS_FSPath(path);
1737017384}
1737117385
17372- #ifdef HAVE_GETRANDOM_SYSCALL
17386+ #if defined(HAVE_GETRANDOM) || defined( HAVE_GETRANDOM_SYSCALL)
1737317387/*[clinic input]
1737417388os.getrandom
1737517389
@@ -17396,7 +17410,11 @@ os_getrandom_impl(PyObject *module, Py_ssize_t size, int flags)
1739617410
1739717411 Py_ssize_t n;
1739817412 while (1) {
17413+ #ifdef HAVE_GETRANDOM
17414+ n = getrandom(data, size, flags);
17415+ #else
1739917416 n = syscall(SYS_getrandom, data, size, flags);
17417+ #endif
1740017418 if (n < 0 && errno == EINTR) {
1740117419 if (PyErr_CheckSignals() < 0) {
1740217420 goto error;
@@ -18504,7 +18522,7 @@ all_ins(PyObject *m)
1850418522 if (PyModule_AddIntMacro(m, RTLD_MEMBER)) return -1;
1850518523#endif
1850618524
18507- #ifdef HAVE_GETRANDOM_SYSCALL
18525+ #if defined(HAVE_GETRANDOM) || defined( HAVE_GETRANDOM_SYSCALL)
1850818526 if (PyModule_AddIntMacro(m, GRND_RANDOM)) return -1;
1850918527 if (PyModule_AddIntMacro(m, GRND_NONBLOCK)) return -1;
1851018528#endif
0 commit comments