From 18ee1e9e84ed32cb7b4f56021bd326150f421a31 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 20 Jan 2022 22:04:08 +0200 Subject: [PATCH 1/6] bpo-45767: Fix integer conversion of device numbers. Fix os.major(), os.minor() and os.makedev(). Support device numbers larger than 2**63-1. Support non-existent device number (NODEV). --- Lib/test/test_posix.py | 12 +++- .../2022-03-10-16-47-57.bpo-45767.ywmyo1.rst | 3 + Modules/clinic/posixmodule.c.h | 32 +++------ Modules/posixmodule.c | 71 +++++++++++++++---- 4 files changed, 79 insertions(+), 39 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2022-03-10-16-47-57.bpo-45767.ywmyo1.rst diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index c10039b17f7f8d..a4963beb6c60ee 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -691,6 +691,7 @@ def test_mknod(self): @unittest.skipUnless(hasattr(posix, 'makedev'), 'test needs posix.makedev()') def test_makedev(self): + NODEV = -1 st = posix.stat(os_helper.TESTFN) dev = st.st_dev self.assertIsInstance(dev, int) @@ -702,7 +703,9 @@ def test_makedev(self): self.assertEqual(posix.major(dev), major) self.assertRaises(TypeError, posix.major, float(dev)) self.assertRaises(TypeError, posix.major) - self.assertRaises((ValueError, OverflowError), posix.major, -1) + for x in -2, 2**64, -2**63-1: + self.assertRaises((ValueError, OverflowError), posix.major, x) + self.assertEqual(posix.major(NODEV), NODEV) minor = posix.minor(dev) self.assertIsInstance(minor, int) @@ -710,13 +713,18 @@ def test_makedev(self): self.assertEqual(posix.minor(dev), minor) self.assertRaises(TypeError, posix.minor, float(dev)) self.assertRaises(TypeError, posix.minor) - self.assertRaises((ValueError, OverflowError), posix.minor, -1) + for x in -2, 2**64, -2**63-1: + self.assertRaises((ValueError, OverflowError), posix.minor, x) + self.assertEqual(posix.minor(NODEV), NODEV) self.assertEqual(posix.makedev(major, minor), dev) self.assertRaises(TypeError, posix.makedev, float(major), minor) self.assertRaises(TypeError, posix.makedev, major, float(minor)) self.assertRaises(TypeError, posix.makedev, major) self.assertRaises(TypeError, posix.makedev) + for x in -2, 2**32, 2**64, -2**63-1: + self.assertRaises((ValueError, OverflowError), posix.makedev, x, minor) + self.assertRaises((ValueError, OverflowError), posix.makedev, major, x) def _test_all_chown_common(self, chown_func, first_param, stat_func): """Common code for chown, fchown and lchown tests.""" diff --git a/Misc/NEWS.d/next/Library/2022-03-10-16-47-57.bpo-45767.ywmyo1.rst b/Misc/NEWS.d/next/Library/2022-03-10-16-47-57.bpo-45767.ywmyo1.rst new file mode 100644 index 00000000000000..cd71c84534863f --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-03-10-16-47-57.bpo-45767.ywmyo1.rst @@ -0,0 +1,3 @@ +Fix integer conversion in :func:`os.major`, :func:`os.minor`, and +:func:`os.makedev`. Support device numbers larger than ``2**63-1``. Support +non-existent device number. diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index 282a5410f70206..9fde2a43c87687 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -6017,7 +6017,7 @@ PyDoc_STRVAR(os_major__doc__, #define OS_MAJOR_METHODDEF \ {"major", (PyCFunction)os_major, METH_O, os_major__doc__}, -static unsigned int +static PyObject * os_major_impl(PyObject *module, dev_t device); static PyObject * @@ -6025,16 +6025,11 @@ os_major(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; dev_t device; - unsigned int _return_value; if (!_Py_Dev_Converter(arg, &device)) { goto exit; } - _return_value = os_major_impl(module, device); - if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) { - goto exit; - } - return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); + return_value = os_major_impl(module, device); exit: return return_value; @@ -6053,7 +6048,7 @@ PyDoc_STRVAR(os_minor__doc__, #define OS_MINOR_METHODDEF \ {"minor", (PyCFunction)os_minor, METH_O, os_minor__doc__}, -static unsigned int +static PyObject * os_minor_impl(PyObject *module, dev_t device); static PyObject * @@ -6061,16 +6056,11 @@ os_minor(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; dev_t device; - unsigned int _return_value; if (!_Py_Dev_Converter(arg, &device)) { goto exit; } - _return_value = os_minor_impl(module, device); - if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) { - goto exit; - } - return_value = PyLong_FromUnsignedLong((unsigned long)_return_value); + return_value = os_minor_impl(module, device); exit: return return_value; @@ -6090,25 +6080,23 @@ PyDoc_STRVAR(os_makedev__doc__, {"makedev", (PyCFunction)(void(*)(void))os_makedev, METH_FASTCALL, os_makedev__doc__}, static dev_t -os_makedev_impl(PyObject *module, int major, int minor); +os_makedev_impl(PyObject *module, dev_t major, dev_t minor); static PyObject * os_makedev(PyObject *module, PyObject *const *args, Py_ssize_t nargs) { PyObject *return_value = NULL; - int major; - int minor; + dev_t major; + dev_t minor; dev_t _return_value; if (!_PyArg_CheckPositional("makedev", nargs, 2, 2)) { goto exit; } - major = _PyLong_AsInt(args[0]); - if (major == -1 && PyErr_Occurred()) { + if (!_Py_Dev_Converter(args[0], &major)) { goto exit; } - minor = _PyLong_AsInt(args[1]); - if (minor == -1 && PyErr_Occurred()) { + if (!_Py_Dev_Converter(args[1], &minor)) { goto exit; } _return_value = os_makedev_impl(module, major, minor); @@ -9303,4 +9291,4 @@ os_waitstatus_to_exitcode(PyObject *module, PyObject *const *args, Py_ssize_t na #ifndef OS_WAITSTATUS_TO_EXITCODE_METHODDEF #define OS_WAITSTATUS_TO_EXITCODE_METHODDEF #endif /* !defined(OS_WAITSTATUS_TO_EXITCODE_METHODDEF) */ -/*[clinic end generated code: output=d95ba7b0b9c52685 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=4044746a008beb44 input=a9049054013a1b77]*/ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 3431c85e2dfde9..111bce0c24cc23 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -877,16 +877,42 @@ _Py_Gid_Converter(PyObject *obj, gid_t *p) #endif /* MS_WINDOWS */ -#define _PyLong_FromDev PyLong_FromLongLong +static PyObject * +_PyLong_FromDev(dev_t dev) +{ + if (dev == NODEV) { + return PyLong_FromLongLong((long long)dev); + } + return PyLong_FromUnsignedLongLong((unsigned long long)dev); +} #if (defined(HAVE_MKNOD) && defined(HAVE_MAKEDEV)) || defined(HAVE_DEVICE_MACROS) static int _Py_Dev_Converter(PyObject *obj, void *p) { - *((dev_t *)p) = PyLong_AsUnsignedLongLong(obj); - if (PyErr_Occurred()) + if (PyLong_Check(obj) && Py_SIZE(obj) < 0) { + int overflow; + long long result = PyLong_AsLongLongAndOverflow(obj, &overflow); + if (result == -1 && PyErr_Occurred()) { + return 0; + } + if (!overflow && result == (long long)NODEV) { + *((dev_t *)p) = NODEV; + return 1; + } + } + + unsigned long long result = PyLong_AsUnsignedLongLong(obj); + if (result == (unsigned long long)-1 && PyErr_Occurred()) { return 0; + } + if ((unsigned long long)(dev_t)result != result) { + PyErr_SetString(PyExc_OverflowError, + "Python int too large to convert to C dev_t"); + return 0; + } + *((dev_t *)p) = (dev_t)result; return 1; } #endif /* (HAVE_MKNOD && HAVE_MAKEDEV) || HAVE_DEVICE_MACROS */ @@ -10638,7 +10664,7 @@ os_mknod_impl(PyObject *module, path_t *path, int mode, dev_t device, #ifdef HAVE_DEVICE_MACROS /*[clinic input] -os.major -> unsigned_int +os.major device: dev_t / @@ -10646,16 +10672,20 @@ os.major -> unsigned_int Extracts a device major number from a raw device number. [clinic start generated code]*/ -static unsigned int +static PyObject * os_major_impl(PyObject *module, dev_t device) -/*[clinic end generated code: output=5b3b2589bafb498e input=1e16a4d30c4d4462]*/ +/*[clinic end generated code: output=4071ffee17647891 input=b1a0a14ec9448229]*/ { - return major(device); + unsigned int result = major(device); + if (result == (unsigned int)NODEV) { + return PyLong_FromLong((int)NODEV); + } + return PyLong_FromUnsignedLong(result); } /*[clinic input] -os.minor -> unsigned_int +os.minor device: dev_t / @@ -10663,28 +10693,39 @@ os.minor -> unsigned_int Extracts a device minor number from a raw device number. [clinic start generated code]*/ -static unsigned int +static PyObject * os_minor_impl(PyObject *module, dev_t device) -/*[clinic end generated code: output=5e1a25e630b0157d input=0842c6d23f24c65e]*/ +/*[clinic end generated code: output=306cb78e3bc5004f input=2f686e463682a9da]*/ { - return minor(device); + unsigned int result = minor(device); + if (result == (unsigned int)NODEV) { + return PyLong_FromLong((int)NODEV); + } + return PyLong_FromUnsignedLong(result); } /*[clinic input] os.makedev -> dev_t - major: int - minor: int + major: dev_t + minor: dev_t / Composes a raw device number from the major and minor device numbers. [clinic start generated code]*/ static dev_t -os_makedev_impl(PyObject *module, int major, int minor) -/*[clinic end generated code: output=881aaa4aba6f6a52 input=4b9fd8fc73cbe48f]*/ +os_makedev_impl(PyObject *module, dev_t major, dev_t minor) +/*[clinic end generated code: output=cad6125c51f5af80 input=2146126ec02e55c1]*/ { + if ((major != NODEV && (dev_t)(unsigned int)major != major) || + (minor != NODEV && (dev_t)(unsigned int)minor != minor)) + { + PyErr_SetString(PyExc_OverflowError, + "Python int too large to convert to C unsigned int"); + return (dev_t)-1; + } return makedev(major, minor); } #endif /* HAVE_DEVICE_MACROS */ From c2d082b2b6ce31d481110084cb0161ac17ab653a Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 10 Mar 2022 17:18:37 +0200 Subject: [PATCH 2/6] Fix compilation on Windows. --- Modules/posixmodule.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 111bce0c24cc23..847f094532b316 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -880,9 +880,11 @@ _Py_Gid_Converter(PyObject *obj, gid_t *p) static PyObject * _PyLong_FromDev(dev_t dev) { +#ifdef NODEV if (dev == NODEV) { return PyLong_FromLongLong((long long)dev); } +#endif return PyLong_FromUnsignedLongLong((unsigned long long)dev); } @@ -891,6 +893,7 @@ _PyLong_FromDev(dev_t dev) static int _Py_Dev_Converter(PyObject *obj, void *p) { +#ifdef NODEV if (PyLong_Check(obj) && Py_SIZE(obj) < 0) { int overflow; long long result = PyLong_AsLongLongAndOverflow(obj, &overflow); @@ -902,6 +905,7 @@ _Py_Dev_Converter(PyObject *obj, void *p) return 1; } } +#endif unsigned long long result = PyLong_AsUnsignedLongLong(obj); if (result == (unsigned long long)-1 && PyErr_Occurred()) { From 90525d0de7477bd83a1334cc82d00a5bab8ccd1d Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 16 Dec 2023 18:27:21 +0200 Subject: [PATCH 3/6] Support POSIX without NODEV. --- Lib/test/test_posix.py | 8 +- Modules/clinic/posixmodule.c.h | 326 ++++++++++++++++++++++++--------- Modules/posixmodule.c | 16 +- 3 files changed, 255 insertions(+), 95 deletions(-) diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index 8f924d4c8a70ab..d2726e38d6db3b 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -692,7 +692,6 @@ def test_mknod(self): @unittest.skipUnless(hasattr(posix, 'makedev'), 'test needs posix.makedev()') def test_makedev(self): - NODEV = -1 st = posix.stat(os_helper.TESTFN) dev = st.st_dev self.assertIsInstance(dev, int) @@ -706,7 +705,6 @@ def test_makedev(self): self.assertRaises(TypeError, posix.major) for x in -2, 2**64, -2**63-1: self.assertRaises((ValueError, OverflowError), posix.major, x) - self.assertEqual(posix.major(NODEV), NODEV) minor = posix.minor(dev) self.assertIsInstance(minor, int) @@ -716,7 +714,6 @@ def test_makedev(self): self.assertRaises(TypeError, posix.minor) for x in -2, 2**64, -2**63-1: self.assertRaises((ValueError, OverflowError), posix.minor, x) - self.assertEqual(posix.minor(NODEV), NODEV) self.assertEqual(posix.makedev(major, minor), dev) self.assertRaises(TypeError, posix.makedev, float(major), minor) @@ -727,6 +724,11 @@ def test_makedev(self): self.assertRaises((ValueError, OverflowError), posix.makedev, x, minor) self.assertRaises((ValueError, OverflowError), posix.makedev, major, x) + if hasattr(posix, '_NODEV'): + NODEV = posix._NODEV + self.assertEqual(posix.major(NODEV), NODEV) + self.assertEqual(posix.minor(NODEV), NODEV) + def _test_all_chown_common(self, chown_func, first_param, stat_func): """Common code for chown, fchown and lchown tests.""" def check_stat(uid, gid): diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index cab81985955b9a..96805849cf50f3 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -8433,7 +8433,7 @@ os_makedev(PyObject *module, PyObject *const *args, Py_ssize_t nargs) #endif /* defined(HAVE_DEVICE_MACROS) */ -#if (defined HAVE_FTRUNCATE || defined MS_WINDOWS) +#if defined(HAVE_DEVICE_MACROS) && (defined HAVE_FTRUNCATE || defined MS_WINDOWS) PyDoc_STRVAR(os_ftruncate__doc__, "ftruncate($module, fd, length, /)\n" @@ -8470,9 +8470,9 @@ os_ftruncate(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* (defined HAVE_FTRUNCATE || defined MS_WINDOWS) */ +#endif /* defined(HAVE_DEVICE_MACROS) && (defined HAVE_FTRUNCATE || defined MS_WINDOWS) */ -#if (defined HAVE_TRUNCATE || defined MS_WINDOWS) +#if defined(HAVE_DEVICE_MACROS) && (defined HAVE_TRUNCATE || defined MS_WINDOWS) PyDoc_STRVAR(os_truncate__doc__, "truncate($module, /, path, length)\n" @@ -8541,9 +8541,9 @@ os_truncate(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* (defined HAVE_TRUNCATE || defined MS_WINDOWS) */ +#endif /* defined(HAVE_DEVICE_MACROS) && (defined HAVE_TRUNCATE || defined MS_WINDOWS) */ -#if (defined(HAVE_POSIX_FALLOCATE) && !defined(POSIX_FADVISE_AIX_BUG) && !defined(__wasi__)) +#if defined(HAVE_DEVICE_MACROS) && (defined(HAVE_POSIX_FALLOCATE) && !defined(POSIX_FADVISE_AIX_BUG) && !defined(__wasi__)) PyDoc_STRVAR(os_posix_fallocate__doc__, "posix_fallocate($module, fd, offset, length, /)\n" @@ -8588,9 +8588,9 @@ os_posix_fallocate(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* (defined(HAVE_POSIX_FALLOCATE) && !defined(POSIX_FADVISE_AIX_BUG) && !defined(__wasi__)) */ +#endif /* defined(HAVE_DEVICE_MACROS) && (defined(HAVE_POSIX_FALLOCATE) && !defined(POSIX_FADVISE_AIX_BUG) && !defined(__wasi__)) */ -#if (defined(HAVE_POSIX_FADVISE) && !defined(POSIX_FADVISE_AIX_BUG)) +#if defined(HAVE_DEVICE_MACROS) && (defined(HAVE_POSIX_FADVISE) && !defined(POSIX_FADVISE_AIX_BUG)) PyDoc_STRVAR(os_posix_fadvise__doc__, "posix_fadvise($module, fd, offset, length, advice, /)\n" @@ -8645,9 +8645,9 @@ os_posix_fadvise(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* (defined(HAVE_POSIX_FADVISE) && !defined(POSIX_FADVISE_AIX_BUG)) */ +#endif /* defined(HAVE_DEVICE_MACROS) && (defined(HAVE_POSIX_FADVISE) && !defined(POSIX_FADVISE_AIX_BUG)) */ -#if defined(MS_WINDOWS) +#if defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) PyDoc_STRVAR(os_putenv__doc__, "putenv($module, name, value, /)\n" @@ -8687,9 +8687,9 @@ os_putenv(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* defined(MS_WINDOWS) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) */ -#if !defined(MS_WINDOWS) +#if defined(HAVE_DEVICE_MACROS) && !defined(MS_WINDOWS) PyDoc_STRVAR(os_putenv__doc__, "putenv($module, name, value, /)\n" @@ -8730,9 +8730,9 @@ os_putenv(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* !defined(MS_WINDOWS) */ +#endif /* defined(HAVE_DEVICE_MACROS) && !defined(MS_WINDOWS) */ -#if defined(MS_WINDOWS) +#if defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) PyDoc_STRVAR(os_unsetenv__doc__, "unsetenv($module, name, /)\n" @@ -8763,9 +8763,9 @@ os_unsetenv(PyObject *module, PyObject *arg) return return_value; } -#endif /* defined(MS_WINDOWS) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) */ -#if !defined(MS_WINDOWS) +#if defined(HAVE_DEVICE_MACROS) && !defined(MS_WINDOWS) PyDoc_STRVAR(os_unsetenv__doc__, "unsetenv($module, name, /)\n" @@ -8797,7 +8797,9 @@ os_unsetenv(PyObject *module, PyObject *arg) return return_value; } -#endif /* !defined(MS_WINDOWS) */ +#endif /* defined(HAVE_DEVICE_MACROS) && !defined(MS_WINDOWS) */ + +#if defined(HAVE_DEVICE_MACROS) PyDoc_STRVAR(os_strerror__doc__, "strerror($module, code, /)\n" @@ -8827,7 +8829,9 @@ os_strerror(PyObject *module, PyObject *arg) return return_value; } -#if defined(HAVE_SYS_WAIT_H) && defined(WCOREDUMP) +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WCOREDUMP) PyDoc_STRVAR(os_WCOREDUMP__doc__, "WCOREDUMP($module, status, /)\n" @@ -8862,9 +8866,9 @@ os_WCOREDUMP(PyObject *module, PyObject *arg) return return_value; } -#endif /* defined(HAVE_SYS_WAIT_H) && defined(WCOREDUMP) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WCOREDUMP) */ -#if defined(HAVE_SYS_WAIT_H) && defined(WIFCONTINUED) +#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WIFCONTINUED) PyDoc_STRVAR(os_WIFCONTINUED__doc__, "WIFCONTINUED($module, /, status)\n" @@ -8932,9 +8936,9 @@ os_WIFCONTINUED(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObj return return_value; } -#endif /* defined(HAVE_SYS_WAIT_H) && defined(WIFCONTINUED) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WIFCONTINUED) */ -#if defined(HAVE_SYS_WAIT_H) && defined(WIFSTOPPED) +#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WIFSTOPPED) PyDoc_STRVAR(os_WIFSTOPPED__doc__, "WIFSTOPPED($module, /, status)\n" @@ -8999,9 +9003,9 @@ os_WIFSTOPPED(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObjec return return_value; } -#endif /* defined(HAVE_SYS_WAIT_H) && defined(WIFSTOPPED) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WIFSTOPPED) */ -#if defined(HAVE_SYS_WAIT_H) && defined(WIFSIGNALED) +#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WIFSIGNALED) PyDoc_STRVAR(os_WIFSIGNALED__doc__, "WIFSIGNALED($module, /, status)\n" @@ -9066,9 +9070,9 @@ os_WIFSIGNALED(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObje return return_value; } -#endif /* defined(HAVE_SYS_WAIT_H) && defined(WIFSIGNALED) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WIFSIGNALED) */ -#if defined(HAVE_SYS_WAIT_H) && defined(WIFEXITED) +#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WIFEXITED) PyDoc_STRVAR(os_WIFEXITED__doc__, "WIFEXITED($module, /, status)\n" @@ -9133,9 +9137,9 @@ os_WIFEXITED(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* defined(HAVE_SYS_WAIT_H) && defined(WIFEXITED) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WIFEXITED) */ -#if defined(HAVE_SYS_WAIT_H) && defined(WEXITSTATUS) +#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WEXITSTATUS) PyDoc_STRVAR(os_WEXITSTATUS__doc__, "WEXITSTATUS($module, /, status)\n" @@ -9200,9 +9204,9 @@ os_WEXITSTATUS(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObje return return_value; } -#endif /* defined(HAVE_SYS_WAIT_H) && defined(WEXITSTATUS) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WEXITSTATUS) */ -#if defined(HAVE_SYS_WAIT_H) && defined(WTERMSIG) +#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WTERMSIG) PyDoc_STRVAR(os_WTERMSIG__doc__, "WTERMSIG($module, /, status)\n" @@ -9267,9 +9271,9 @@ os_WTERMSIG(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* defined(HAVE_SYS_WAIT_H) && defined(WTERMSIG) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WTERMSIG) */ -#if defined(HAVE_SYS_WAIT_H) && defined(WSTOPSIG) +#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WSTOPSIG) PyDoc_STRVAR(os_WSTOPSIG__doc__, "WSTOPSIG($module, /, status)\n" @@ -9334,9 +9338,9 @@ os_WSTOPSIG(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* defined(HAVE_SYS_WAIT_H) && defined(WSTOPSIG) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WSTOPSIG) */ -#if (defined(HAVE_FSTATVFS) && defined(HAVE_SYS_STATVFS_H)) +#if defined(HAVE_DEVICE_MACROS) && (defined(HAVE_FSTATVFS) && defined(HAVE_SYS_STATVFS_H)) PyDoc_STRVAR(os_fstatvfs__doc__, "fstatvfs($module, fd, /)\n" @@ -9368,9 +9372,9 @@ os_fstatvfs(PyObject *module, PyObject *arg) return return_value; } -#endif /* (defined(HAVE_FSTATVFS) && defined(HAVE_SYS_STATVFS_H)) */ +#endif /* defined(HAVE_DEVICE_MACROS) && (defined(HAVE_FSTATVFS) && defined(HAVE_SYS_STATVFS_H)) */ -#if (defined(HAVE_STATVFS) && defined(HAVE_SYS_STATVFS_H)) +#if defined(HAVE_DEVICE_MACROS) && (defined(HAVE_STATVFS) && defined(HAVE_SYS_STATVFS_H)) PyDoc_STRVAR(os_statvfs__doc__, "statvfs($module, /, path)\n" @@ -9436,9 +9440,9 @@ os_statvfs(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject * return return_value; } -#endif /* (defined(HAVE_STATVFS) && defined(HAVE_SYS_STATVFS_H)) */ +#endif /* defined(HAVE_DEVICE_MACROS) && (defined(HAVE_STATVFS) && defined(HAVE_SYS_STATVFS_H)) */ -#if defined(MS_WINDOWS) +#if defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) PyDoc_STRVAR(os__getdiskusage__doc__, "_getdiskusage($module, /, path)\n" @@ -9500,9 +9504,9 @@ os__getdiskusage(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyOb return return_value; } -#endif /* defined(MS_WINDOWS) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) */ -#if defined(HAVE_FPATHCONF) +#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_FPATHCONF) PyDoc_STRVAR(os_fpathconf__doc__, "fpathconf($module, fd, name, /)\n" @@ -9545,9 +9549,9 @@ os_fpathconf(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* defined(HAVE_FPATHCONF) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_FPATHCONF) */ -#if defined(HAVE_PATHCONF) +#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_PATHCONF) PyDoc_STRVAR(os_pathconf__doc__, "pathconf($module, /, path, name)\n" @@ -9622,9 +9626,9 @@ os_pathconf(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* defined(HAVE_PATHCONF) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_PATHCONF) */ -#if defined(HAVE_CONFSTR) +#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_CONFSTR) PyDoc_STRVAR(os_confstr__doc__, "confstr($module, name, /)\n" @@ -9653,9 +9657,9 @@ os_confstr(PyObject *module, PyObject *arg) return return_value; } -#endif /* defined(HAVE_CONFSTR) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_CONFSTR) */ -#if defined(HAVE_SYSCONF) +#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYSCONF) PyDoc_STRVAR(os_sysconf__doc__, "sysconf($module, name, /)\n" @@ -9689,7 +9693,9 @@ os_sysconf(PyObject *module, PyObject *arg) return return_value; } -#endif /* defined(HAVE_SYSCONF) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYSCONF) */ + +#if defined(HAVE_DEVICE_MACROS) PyDoc_STRVAR(os_abort__doc__, "abort($module, /)\n" @@ -9712,7 +9718,9 @@ os_abort(PyObject *module, PyObject *Py_UNUSED(ignored)) return os_abort_impl(module); } -#if defined(MS_WINDOWS) +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) PyDoc_STRVAR(os_startfile__doc__, "startfile($module, /, filepath, operation=,\n" @@ -9855,9 +9863,9 @@ os_startfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* defined(MS_WINDOWS) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) */ -#if defined(HAVE_GETLOADAVG) +#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_GETLOADAVG) PyDoc_STRVAR(os_getloadavg__doc__, "getloadavg($module, /)\n" @@ -9881,7 +9889,9 @@ os_getloadavg(PyObject *module, PyObject *Py_UNUSED(ignored)) return os_getloadavg_impl(module); } -#endif /* defined(HAVE_GETLOADAVG) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_GETLOADAVG) */ + +#if defined(HAVE_DEVICE_MACROS) PyDoc_STRVAR(os_device_encoding__doc__, "device_encoding($module, /, fd)\n" @@ -9944,7 +9954,9 @@ os_device_encoding(PyObject *module, PyObject *const *args, Py_ssize_t nargs, Py return return_value; } -#if defined(HAVE_SETRESUID) +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SETRESUID) PyDoc_STRVAR(os_setresuid__doc__, "setresuid($module, ruid, euid, suid, /)\n" @@ -9984,9 +9996,9 @@ os_setresuid(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* defined(HAVE_SETRESUID) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SETRESUID) */ -#if defined(HAVE_SETRESGID) +#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SETRESGID) PyDoc_STRVAR(os_setresgid__doc__, "setresgid($module, rgid, egid, sgid, /)\n" @@ -10026,9 +10038,9 @@ os_setresgid(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* defined(HAVE_SETRESGID) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SETRESGID) */ -#if defined(HAVE_GETRESUID) +#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_GETRESUID) PyDoc_STRVAR(os_getresuid__doc__, "getresuid($module, /)\n" @@ -10048,9 +10060,9 @@ os_getresuid(PyObject *module, PyObject *Py_UNUSED(ignored)) return os_getresuid_impl(module); } -#endif /* defined(HAVE_GETRESUID) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_GETRESUID) */ -#if defined(HAVE_GETRESGID) +#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_GETRESGID) PyDoc_STRVAR(os_getresgid__doc__, "getresgid($module, /)\n" @@ -10070,9 +10082,9 @@ os_getresgid(PyObject *module, PyObject *Py_UNUSED(ignored)) return os_getresgid_impl(module); } -#endif /* defined(HAVE_GETRESGID) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_GETRESGID) */ -#if defined(USE_XATTRS) +#if defined(HAVE_DEVICE_MACROS) && defined(USE_XATTRS) PyDoc_STRVAR(os_getxattr__doc__, "getxattr($module, /, path, attribute, *, follow_symlinks=True)\n" @@ -10156,9 +10168,9 @@ os_getxattr(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* defined(USE_XATTRS) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(USE_XATTRS) */ -#if defined(USE_XATTRS) +#if defined(HAVE_DEVICE_MACROS) && defined(USE_XATTRS) PyDoc_STRVAR(os_setxattr__doc__, "setxattr($module, /, path, attribute, value, flags=0, *,\n" @@ -10265,9 +10277,9 @@ os_setxattr(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* defined(USE_XATTRS) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(USE_XATTRS) */ -#if defined(USE_XATTRS) +#if defined(HAVE_DEVICE_MACROS) && defined(USE_XATTRS) PyDoc_STRVAR(os_removexattr__doc__, "removexattr($module, /, path, attribute, *, follow_symlinks=True)\n" @@ -10351,9 +10363,9 @@ os_removexattr(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObje return return_value; } -#endif /* defined(USE_XATTRS) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(USE_XATTRS) */ -#if defined(USE_XATTRS) +#if defined(HAVE_DEVICE_MACROS) && defined(USE_XATTRS) PyDoc_STRVAR(os_listxattr__doc__, "listxattr($module, /, path=None, *, follow_symlinks=True)\n" @@ -10440,7 +10452,9 @@ os_listxattr(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* defined(USE_XATTRS) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(USE_XATTRS) */ + +#if defined(HAVE_DEVICE_MACROS) PyDoc_STRVAR(os_urandom__doc__, "urandom($module, size, /)\n" @@ -10478,7 +10492,9 @@ os_urandom(PyObject *module, PyObject *arg) return return_value; } -#if defined(HAVE_MEMFD_CREATE) +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_MEMFD_CREATE) PyDoc_STRVAR(os_memfd_create__doc__, "memfd_create($module, /, name, flags=MFD_CLOEXEC)\n" @@ -10549,9 +10565,9 @@ os_memfd_create(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObj return return_value; } -#endif /* defined(HAVE_MEMFD_CREATE) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_MEMFD_CREATE) */ -#if (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) +#if defined(HAVE_DEVICE_MACROS) && (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) PyDoc_STRVAR(os_eventfd__doc__, "eventfd($module, /, initval, flags=EFD_CLOEXEC)\n" @@ -10620,9 +10636,9 @@ os_eventfd(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject * return return_value; } -#endif /* (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) */ +#endif /* defined(HAVE_DEVICE_MACROS) && (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) */ -#if (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) +#if defined(HAVE_DEVICE_MACROS) && (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) PyDoc_STRVAR(os_eventfd_read__doc__, "eventfd_read($module, /, fd)\n" @@ -10681,9 +10697,9 @@ os_eventfd_read(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObj return return_value; } -#endif /* (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) */ +#endif /* defined(HAVE_DEVICE_MACROS) && (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) */ -#if (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) +#if defined(HAVE_DEVICE_MACROS) && (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) PyDoc_STRVAR(os_eventfd_write__doc__, "eventfd_write($module, /, fd, value)\n" @@ -10746,9 +10762,9 @@ os_eventfd_write(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyOb return return_value; } -#endif /* (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) */ +#endif /* defined(HAVE_DEVICE_MACROS) && (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) */ -#if (defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL)) +#if defined(HAVE_DEVICE_MACROS) && (defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL)) PyDoc_STRVAR(os_get_terminal_size__doc__, "get_terminal_size($module, fd=, /)\n" @@ -10797,7 +10813,9 @@ os_get_terminal_size(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* (defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL)) */ +#endif /* defined(HAVE_DEVICE_MACROS) && (defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL)) */ + +#if defined(HAVE_DEVICE_MACROS) PyDoc_STRVAR(os_cpu_count__doc__, "cpu_count($module, /)\n" @@ -10819,6 +10837,10 @@ os_cpu_count(PyObject *module, PyObject *Py_UNUSED(ignored)) return os_cpu_count_impl(module); } +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) + PyDoc_STRVAR(os_get_inheritable__doc__, "get_inheritable($module, fd, /)\n" "--\n" @@ -10852,6 +10874,10 @@ os_get_inheritable(PyObject *module, PyObject *arg) return return_value; } +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) + PyDoc_STRVAR(os_set_inheritable__doc__, "set_inheritable($module, fd, inheritable, /)\n" "--\n" @@ -10888,7 +10914,9 @@ os_set_inheritable(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#if defined(MS_WINDOWS) +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) PyDoc_STRVAR(os_get_handle_inheritable__doc__, "get_handle_inheritable($module, handle, /)\n" @@ -10922,9 +10950,9 @@ os_get_handle_inheritable(PyObject *module, PyObject *arg) return return_value; } -#endif /* defined(MS_WINDOWS) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) */ -#if defined(MS_WINDOWS) +#if defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) PyDoc_STRVAR(os_set_handle_inheritable__doc__, "set_handle_inheritable($module, handle, inheritable, /)\n" @@ -10956,7 +10984,9 @@ os_set_handle_inheritable(PyObject *module, PyObject *const *args, Py_ssize_t na return return_value; } -#endif /* defined(MS_WINDOWS) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) */ + +#if defined(HAVE_DEVICE_MACROS) PyDoc_STRVAR(os_get_blocking__doc__, "get_blocking($module, fd, /)\n" @@ -10993,6 +11023,10 @@ os_get_blocking(PyObject *module, PyObject *arg) return return_value; } +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) + PyDoc_STRVAR(os_set_blocking__doc__, "set_blocking($module, fd, blocking, /)\n" "--\n" @@ -11032,6 +11066,10 @@ os_set_blocking(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) + PyDoc_STRVAR(os_DirEntry_is_symlink__doc__, "is_symlink($self, /)\n" "--\n" @@ -11064,6 +11102,10 @@ os_DirEntry_is_symlink(DirEntry *self, PyTypeObject *defining_class, PyObject *c return return_value; } +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) + PyDoc_STRVAR(os_DirEntry_is_junction__doc__, "is_junction($self, /)\n" "--\n" @@ -11092,6 +11134,10 @@ os_DirEntry_is_junction(DirEntry *self, PyObject *Py_UNUSED(ignored)) return return_value; } +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) + PyDoc_STRVAR(os_DirEntry_stat__doc__, "stat($self, /, *, follow_symlinks=True)\n" "--\n" @@ -11156,6 +11202,10 @@ os_DirEntry_stat(DirEntry *self, PyTypeObject *defining_class, PyObject *const * return return_value; } +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) + PyDoc_STRVAR(os_DirEntry_is_dir__doc__, "is_dir($self, /, *, follow_symlinks=True)\n" "--\n" @@ -11225,6 +11275,10 @@ os_DirEntry_is_dir(DirEntry *self, PyTypeObject *defining_class, PyObject *const return return_value; } +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) + PyDoc_STRVAR(os_DirEntry_is_file__doc__, "is_file($self, /, *, follow_symlinks=True)\n" "--\n" @@ -11294,6 +11348,10 @@ os_DirEntry_is_file(DirEntry *self, PyTypeObject *defining_class, PyObject *cons return return_value; } +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) + PyDoc_STRVAR(os_DirEntry_inode__doc__, "inode($self, /)\n" "--\n" @@ -11312,6 +11370,10 @@ os_DirEntry_inode(DirEntry *self, PyObject *Py_UNUSED(ignored)) return os_DirEntry_inode_impl(self); } +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) + PyDoc_STRVAR(os_DirEntry___fspath____doc__, "__fspath__($self, /)\n" "--\n" @@ -11330,6 +11392,10 @@ os_DirEntry___fspath__(DirEntry *self, PyObject *Py_UNUSED(ignored)) return os_DirEntry___fspath___impl(self); } +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) + PyDoc_STRVAR(os_scandir__doc__, "scandir($module, /, path=None)\n" "--\n" @@ -11401,6 +11467,10 @@ os_scandir(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject * return return_value; } +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) + PyDoc_STRVAR(os_fspath__doc__, "fspath($module, /, path)\n" "--\n" @@ -11460,7 +11530,9 @@ os_fspath(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *k return return_value; } -#if defined(HAVE_GETRANDOM_SYSCALL) +#endif /* defined(HAVE_DEVICE_MACROS) */ + +#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_GETRANDOM_SYSCALL) PyDoc_STRVAR(os_getrandom__doc__, "getrandom($module, /, size, flags=0)\n" @@ -11538,9 +11610,9 @@ os_getrandom(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* defined(HAVE_GETRANDOM_SYSCALL) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_GETRANDOM_SYSCALL) */ -#if (defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_APP) || defined(MS_WINDOWS_SYSTEM)) +#if defined(HAVE_DEVICE_MACROS) && (defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_APP) || defined(MS_WINDOWS_SYSTEM)) PyDoc_STRVAR(os__add_dll_directory__doc__, "_add_dll_directory($module, /, path)\n" @@ -11609,9 +11681,9 @@ os__add_dll_directory(PyObject *module, PyObject *const *args, Py_ssize_t nargs, return return_value; } -#endif /* (defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_APP) || defined(MS_WINDOWS_SYSTEM)) */ +#endif /* defined(HAVE_DEVICE_MACROS) && (defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_APP) || defined(MS_WINDOWS_SYSTEM)) */ -#if (defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_APP) || defined(MS_WINDOWS_SYSTEM)) +#if defined(HAVE_DEVICE_MACROS) && (defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_APP) || defined(MS_WINDOWS_SYSTEM)) PyDoc_STRVAR(os__remove_dll_directory__doc__, "_remove_dll_directory($module, /, cookie)\n" @@ -11672,9 +11744,9 @@ os__remove_dll_directory(PyObject *module, PyObject *const *args, Py_ssize_t nar return return_value; } -#endif /* (defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_APP) || defined(MS_WINDOWS_SYSTEM)) */ +#endif /* defined(HAVE_DEVICE_MACROS) && (defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_APP) || defined(MS_WINDOWS_SYSTEM)) */ -#if (defined(WIFEXITED) || defined(MS_WINDOWS)) +#if defined(HAVE_DEVICE_MACROS) && (defined(WIFEXITED) || defined(MS_WINDOWS)) PyDoc_STRVAR(os_waitstatus_to_exitcode__doc__, "waitstatus_to_exitcode($module, /, status)\n" @@ -11743,9 +11815,9 @@ os_waitstatus_to_exitcode(PyObject *module, PyObject *const *args, Py_ssize_t na return return_value; } -#endif /* (defined(WIFEXITED) || defined(MS_WINDOWS)) */ +#endif /* defined(HAVE_DEVICE_MACROS) && (defined(WIFEXITED) || defined(MS_WINDOWS)) */ -#if defined(MS_WINDOWS) +#if defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) PyDoc_STRVAR(os__supports_virtual_terminal__doc__, "_supports_virtual_terminal($module, /)\n" @@ -11765,7 +11837,7 @@ os__supports_virtual_terminal(PyObject *module, PyObject *Py_UNUSED(ignored)) return os__supports_virtual_terminal_impl(module); } -#endif /* defined(MS_WINDOWS) */ +#endif /* defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) */ #ifndef OS_TTYNAME_METHODDEF #define OS_TTYNAME_METHODDEF @@ -12263,6 +12335,10 @@ os__supports_virtual_terminal(PyObject *module, PyObject *Py_UNUSED(ignored)) #define OS_UNSETENV_METHODDEF #endif /* !defined(OS_UNSETENV_METHODDEF) */ +#ifndef OS_STRERROR_METHODDEF + #define OS_STRERROR_METHODDEF +#endif /* !defined(OS_STRERROR_METHODDEF) */ + #ifndef OS_WCOREDUMP_METHODDEF #define OS_WCOREDUMP_METHODDEF #endif /* !defined(OS_WCOREDUMP_METHODDEF) */ @@ -12323,6 +12399,10 @@ os__supports_virtual_terminal(PyObject *module, PyObject *Py_UNUSED(ignored)) #define OS_SYSCONF_METHODDEF #endif /* !defined(OS_SYSCONF_METHODDEF) */ +#ifndef OS_ABORT_METHODDEF + #define OS_ABORT_METHODDEF +#endif /* !defined(OS_ABORT_METHODDEF) */ + #ifndef OS_STARTFILE_METHODDEF #define OS_STARTFILE_METHODDEF #endif /* !defined(OS_STARTFILE_METHODDEF) */ @@ -12331,6 +12411,10 @@ os__supports_virtual_terminal(PyObject *module, PyObject *Py_UNUSED(ignored)) #define OS_GETLOADAVG_METHODDEF #endif /* !defined(OS_GETLOADAVG_METHODDEF) */ +#ifndef OS_DEVICE_ENCODING_METHODDEF + #define OS_DEVICE_ENCODING_METHODDEF +#endif /* !defined(OS_DEVICE_ENCODING_METHODDEF) */ + #ifndef OS_SETRESUID_METHODDEF #define OS_SETRESUID_METHODDEF #endif /* !defined(OS_SETRESUID_METHODDEF) */ @@ -12363,6 +12447,10 @@ os__supports_virtual_terminal(PyObject *module, PyObject *Py_UNUSED(ignored)) #define OS_LISTXATTR_METHODDEF #endif /* !defined(OS_LISTXATTR_METHODDEF) */ +#ifndef OS_URANDOM_METHODDEF + #define OS_URANDOM_METHODDEF +#endif /* !defined(OS_URANDOM_METHODDEF) */ + #ifndef OS_MEMFD_CREATE_METHODDEF #define OS_MEMFD_CREATE_METHODDEF #endif /* !defined(OS_MEMFD_CREATE_METHODDEF) */ @@ -12383,6 +12471,18 @@ os__supports_virtual_terminal(PyObject *module, PyObject *Py_UNUSED(ignored)) #define OS_GET_TERMINAL_SIZE_METHODDEF #endif /* !defined(OS_GET_TERMINAL_SIZE_METHODDEF) */ +#ifndef OS_CPU_COUNT_METHODDEF + #define OS_CPU_COUNT_METHODDEF +#endif /* !defined(OS_CPU_COUNT_METHODDEF) */ + +#ifndef OS_GET_INHERITABLE_METHODDEF + #define OS_GET_INHERITABLE_METHODDEF +#endif /* !defined(OS_GET_INHERITABLE_METHODDEF) */ + +#ifndef OS_SET_INHERITABLE_METHODDEF + #define OS_SET_INHERITABLE_METHODDEF +#endif /* !defined(OS_SET_INHERITABLE_METHODDEF) */ + #ifndef OS_GET_HANDLE_INHERITABLE_METHODDEF #define OS_GET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_GET_HANDLE_INHERITABLE_METHODDEF) */ @@ -12391,6 +12491,50 @@ os__supports_virtual_terminal(PyObject *module, PyObject *Py_UNUSED(ignored)) #define OS_SET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ +#ifndef OS_GET_BLOCKING_METHODDEF + #define OS_GET_BLOCKING_METHODDEF +#endif /* !defined(OS_GET_BLOCKING_METHODDEF) */ + +#ifndef OS_SET_BLOCKING_METHODDEF + #define OS_SET_BLOCKING_METHODDEF +#endif /* !defined(OS_SET_BLOCKING_METHODDEF) */ + +#ifndef OS_DIRENTRY_IS_SYMLINK_METHODDEF + #define OS_DIRENTRY_IS_SYMLINK_METHODDEF +#endif /* !defined(OS_DIRENTRY_IS_SYMLINK_METHODDEF) */ + +#ifndef OS_DIRENTRY_IS_JUNCTION_METHODDEF + #define OS_DIRENTRY_IS_JUNCTION_METHODDEF +#endif /* !defined(OS_DIRENTRY_IS_JUNCTION_METHODDEF) */ + +#ifndef OS_DIRENTRY_STAT_METHODDEF + #define OS_DIRENTRY_STAT_METHODDEF +#endif /* !defined(OS_DIRENTRY_STAT_METHODDEF) */ + +#ifndef OS_DIRENTRY_IS_DIR_METHODDEF + #define OS_DIRENTRY_IS_DIR_METHODDEF +#endif /* !defined(OS_DIRENTRY_IS_DIR_METHODDEF) */ + +#ifndef OS_DIRENTRY_IS_FILE_METHODDEF + #define OS_DIRENTRY_IS_FILE_METHODDEF +#endif /* !defined(OS_DIRENTRY_IS_FILE_METHODDEF) */ + +#ifndef OS_DIRENTRY_INODE_METHODDEF + #define OS_DIRENTRY_INODE_METHODDEF +#endif /* !defined(OS_DIRENTRY_INODE_METHODDEF) */ + +#ifndef OS_DIRENTRY___FSPATH___METHODDEF + #define OS_DIRENTRY___FSPATH___METHODDEF +#endif /* !defined(OS_DIRENTRY___FSPATH___METHODDEF) */ + +#ifndef OS_SCANDIR_METHODDEF + #define OS_SCANDIR_METHODDEF +#endif /* !defined(OS_SCANDIR_METHODDEF) */ + +#ifndef OS_FSPATH_METHODDEF + #define OS_FSPATH_METHODDEF +#endif /* !defined(OS_FSPATH_METHODDEF) */ + #ifndef OS_GETRANDOM_METHODDEF #define OS_GETRANDOM_METHODDEF #endif /* !defined(OS_GETRANDOM_METHODDEF) */ @@ -12410,4 +12554,4 @@ os__supports_virtual_terminal(PyObject *module, PyObject *Py_UNUSED(ignored)) #ifndef OS__SUPPORTS_VIRTUAL_TERMINAL_METHODDEF #define OS__SUPPORTS_VIRTUAL_TERMINAL_METHODDEF #endif /* !defined(OS__SUPPORTS_VIRTUAL_TERMINAL_METHODDEF) */ -/*[clinic end generated code: output=dfcaffd690b9a556 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=b80228806fba7dc3 input=a9049054013a1b77]*/ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 6ece6d37222870..01f0601f2c2831 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -18,6 +18,7 @@ #include "pycore_fileutils.h" // _Py_closerange() #include "pycore_import.h" // _PyImport_ReInitLock() #include "pycore_initconfig.h" // _PyStatus_EXCEPTION() +#include "pycore_long.h" // _PyLong_IsNegative() #include "pycore_moduleobject.h" // _PyModule_GetState() #include "pycore_object.h" // _PyObject_LookupSpecial() #include "pycore_pylifecycle.h" // _PyOS_URandom() @@ -951,7 +952,7 @@ static int _Py_Dev_Converter(PyObject *obj, void *p) { #ifdef NODEV - if (PyLong_Check(obj) && Py_SIZE(obj) < 0) { + if (PyLong_Check(obj) && _PyLong_IsNegative((PyLongObject *)obj)) { int overflow; long long result = PyLong_AsLongLongAndOverflow(obj, &overflow); if (result == -1 && PyErr_Occurred()) { @@ -12094,9 +12095,11 @@ os_major_impl(PyObject *module, dev_t device) /*[clinic end generated code: output=4071ffee17647891 input=b1a0a14ec9448229]*/ { unsigned int result = major(device); +#ifdef NODEV if (result == (unsigned int)NODEV) { return PyLong_FromLong((int)NODEV); } +#endif return PyLong_FromUnsignedLong(result); } @@ -12115,9 +12118,11 @@ os_minor_impl(PyObject *module, dev_t device) /*[clinic end generated code: output=306cb78e3bc5004f input=2f686e463682a9da]*/ { unsigned int result = minor(device); +#ifdef NODEV if (result == (unsigned int)NODEV) { return PyLong_FromLong((int)NODEV); } +#endif return PyLong_FromUnsignedLong(result); } @@ -12136,8 +12141,13 @@ static dev_t os_makedev_impl(PyObject *module, dev_t major, dev_t minor) /*[clinic end generated code: output=cad6125c51f5af80 input=2146126ec02e55c1]*/ { +#ifdef NODEV if ((major != NODEV && (dev_t)(unsigned int)major != major) || (minor != NODEV && (dev_t)(unsigned int)minor != minor)) +#else + if ((dev_t)(unsigned int)major != major) || + (dev_t)(unsigned int)minor != minor)) +#endif { PyErr_SetString(PyExc_OverflowError, "Python int too large to convert to C unsigned int"); @@ -17020,6 +17030,10 @@ all_ins(PyObject *m) if (PyModule_AddIntConstant(m, "_LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR", LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR)) return -1; #endif +#ifdef NODEV + if (PyModule_AddIntConstant(m, "_NODEV", NODEV)) return -1; +#endif + return 0; } From 17c02dc3a6a60943853efec4116b642f2c918bbe Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 17 Dec 2023 11:26:33 +0200 Subject: [PATCH 4/6] Regen clinic. --- Modules/clinic/posixmodule.c.h | 326 +++++++++------------------------ 1 file changed, 91 insertions(+), 235 deletions(-) diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index 96805849cf50f3..cab81985955b9a 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -8433,7 +8433,7 @@ os_makedev(PyObject *module, PyObject *const *args, Py_ssize_t nargs) #endif /* defined(HAVE_DEVICE_MACROS) */ -#if defined(HAVE_DEVICE_MACROS) && (defined HAVE_FTRUNCATE || defined MS_WINDOWS) +#if (defined HAVE_FTRUNCATE || defined MS_WINDOWS) PyDoc_STRVAR(os_ftruncate__doc__, "ftruncate($module, fd, length, /)\n" @@ -8470,9 +8470,9 @@ os_ftruncate(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && (defined HAVE_FTRUNCATE || defined MS_WINDOWS) */ +#endif /* (defined HAVE_FTRUNCATE || defined MS_WINDOWS) */ -#if defined(HAVE_DEVICE_MACROS) && (defined HAVE_TRUNCATE || defined MS_WINDOWS) +#if (defined HAVE_TRUNCATE || defined MS_WINDOWS) PyDoc_STRVAR(os_truncate__doc__, "truncate($module, /, path, length)\n" @@ -8541,9 +8541,9 @@ os_truncate(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && (defined HAVE_TRUNCATE || defined MS_WINDOWS) */ +#endif /* (defined HAVE_TRUNCATE || defined MS_WINDOWS) */ -#if defined(HAVE_DEVICE_MACROS) && (defined(HAVE_POSIX_FALLOCATE) && !defined(POSIX_FADVISE_AIX_BUG) && !defined(__wasi__)) +#if (defined(HAVE_POSIX_FALLOCATE) && !defined(POSIX_FADVISE_AIX_BUG) && !defined(__wasi__)) PyDoc_STRVAR(os_posix_fallocate__doc__, "posix_fallocate($module, fd, offset, length, /)\n" @@ -8588,9 +8588,9 @@ os_posix_fallocate(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && (defined(HAVE_POSIX_FALLOCATE) && !defined(POSIX_FADVISE_AIX_BUG) && !defined(__wasi__)) */ +#endif /* (defined(HAVE_POSIX_FALLOCATE) && !defined(POSIX_FADVISE_AIX_BUG) && !defined(__wasi__)) */ -#if defined(HAVE_DEVICE_MACROS) && (defined(HAVE_POSIX_FADVISE) && !defined(POSIX_FADVISE_AIX_BUG)) +#if (defined(HAVE_POSIX_FADVISE) && !defined(POSIX_FADVISE_AIX_BUG)) PyDoc_STRVAR(os_posix_fadvise__doc__, "posix_fadvise($module, fd, offset, length, advice, /)\n" @@ -8645,9 +8645,9 @@ os_posix_fadvise(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && (defined(HAVE_POSIX_FADVISE) && !defined(POSIX_FADVISE_AIX_BUG)) */ +#endif /* (defined(HAVE_POSIX_FADVISE) && !defined(POSIX_FADVISE_AIX_BUG)) */ -#if defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) +#if defined(MS_WINDOWS) PyDoc_STRVAR(os_putenv__doc__, "putenv($module, name, value, /)\n" @@ -8687,9 +8687,9 @@ os_putenv(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) */ +#endif /* defined(MS_WINDOWS) */ -#if defined(HAVE_DEVICE_MACROS) && !defined(MS_WINDOWS) +#if !defined(MS_WINDOWS) PyDoc_STRVAR(os_putenv__doc__, "putenv($module, name, value, /)\n" @@ -8730,9 +8730,9 @@ os_putenv(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && !defined(MS_WINDOWS) */ +#endif /* !defined(MS_WINDOWS) */ -#if defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) +#if defined(MS_WINDOWS) PyDoc_STRVAR(os_unsetenv__doc__, "unsetenv($module, name, /)\n" @@ -8763,9 +8763,9 @@ os_unsetenv(PyObject *module, PyObject *arg) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) */ +#endif /* defined(MS_WINDOWS) */ -#if defined(HAVE_DEVICE_MACROS) && !defined(MS_WINDOWS) +#if !defined(MS_WINDOWS) PyDoc_STRVAR(os_unsetenv__doc__, "unsetenv($module, name, /)\n" @@ -8797,9 +8797,7 @@ os_unsetenv(PyObject *module, PyObject *arg) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && !defined(MS_WINDOWS) */ - -#if defined(HAVE_DEVICE_MACROS) +#endif /* !defined(MS_WINDOWS) */ PyDoc_STRVAR(os_strerror__doc__, "strerror($module, code, /)\n" @@ -8829,9 +8827,7 @@ os_strerror(PyObject *module, PyObject *arg) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) */ - -#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WCOREDUMP) +#if defined(HAVE_SYS_WAIT_H) && defined(WCOREDUMP) PyDoc_STRVAR(os_WCOREDUMP__doc__, "WCOREDUMP($module, status, /)\n" @@ -8866,9 +8862,9 @@ os_WCOREDUMP(PyObject *module, PyObject *arg) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WCOREDUMP) */ +#endif /* defined(HAVE_SYS_WAIT_H) && defined(WCOREDUMP) */ -#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WIFCONTINUED) +#if defined(HAVE_SYS_WAIT_H) && defined(WIFCONTINUED) PyDoc_STRVAR(os_WIFCONTINUED__doc__, "WIFCONTINUED($module, /, status)\n" @@ -8936,9 +8932,9 @@ os_WIFCONTINUED(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObj return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WIFCONTINUED) */ +#endif /* defined(HAVE_SYS_WAIT_H) && defined(WIFCONTINUED) */ -#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WIFSTOPPED) +#if defined(HAVE_SYS_WAIT_H) && defined(WIFSTOPPED) PyDoc_STRVAR(os_WIFSTOPPED__doc__, "WIFSTOPPED($module, /, status)\n" @@ -9003,9 +8999,9 @@ os_WIFSTOPPED(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObjec return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WIFSTOPPED) */ +#endif /* defined(HAVE_SYS_WAIT_H) && defined(WIFSTOPPED) */ -#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WIFSIGNALED) +#if defined(HAVE_SYS_WAIT_H) && defined(WIFSIGNALED) PyDoc_STRVAR(os_WIFSIGNALED__doc__, "WIFSIGNALED($module, /, status)\n" @@ -9070,9 +9066,9 @@ os_WIFSIGNALED(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObje return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WIFSIGNALED) */ +#endif /* defined(HAVE_SYS_WAIT_H) && defined(WIFSIGNALED) */ -#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WIFEXITED) +#if defined(HAVE_SYS_WAIT_H) && defined(WIFEXITED) PyDoc_STRVAR(os_WIFEXITED__doc__, "WIFEXITED($module, /, status)\n" @@ -9137,9 +9133,9 @@ os_WIFEXITED(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WIFEXITED) */ +#endif /* defined(HAVE_SYS_WAIT_H) && defined(WIFEXITED) */ -#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WEXITSTATUS) +#if defined(HAVE_SYS_WAIT_H) && defined(WEXITSTATUS) PyDoc_STRVAR(os_WEXITSTATUS__doc__, "WEXITSTATUS($module, /, status)\n" @@ -9204,9 +9200,9 @@ os_WEXITSTATUS(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObje return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WEXITSTATUS) */ +#endif /* defined(HAVE_SYS_WAIT_H) && defined(WEXITSTATUS) */ -#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WTERMSIG) +#if defined(HAVE_SYS_WAIT_H) && defined(WTERMSIG) PyDoc_STRVAR(os_WTERMSIG__doc__, "WTERMSIG($module, /, status)\n" @@ -9271,9 +9267,9 @@ os_WTERMSIG(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WTERMSIG) */ +#endif /* defined(HAVE_SYS_WAIT_H) && defined(WTERMSIG) */ -#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WSTOPSIG) +#if defined(HAVE_SYS_WAIT_H) && defined(WSTOPSIG) PyDoc_STRVAR(os_WSTOPSIG__doc__, "WSTOPSIG($module, /, status)\n" @@ -9338,9 +9334,9 @@ os_WSTOPSIG(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYS_WAIT_H) && defined(WSTOPSIG) */ +#endif /* defined(HAVE_SYS_WAIT_H) && defined(WSTOPSIG) */ -#if defined(HAVE_DEVICE_MACROS) && (defined(HAVE_FSTATVFS) && defined(HAVE_SYS_STATVFS_H)) +#if (defined(HAVE_FSTATVFS) && defined(HAVE_SYS_STATVFS_H)) PyDoc_STRVAR(os_fstatvfs__doc__, "fstatvfs($module, fd, /)\n" @@ -9372,9 +9368,9 @@ os_fstatvfs(PyObject *module, PyObject *arg) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && (defined(HAVE_FSTATVFS) && defined(HAVE_SYS_STATVFS_H)) */ +#endif /* (defined(HAVE_FSTATVFS) && defined(HAVE_SYS_STATVFS_H)) */ -#if defined(HAVE_DEVICE_MACROS) && (defined(HAVE_STATVFS) && defined(HAVE_SYS_STATVFS_H)) +#if (defined(HAVE_STATVFS) && defined(HAVE_SYS_STATVFS_H)) PyDoc_STRVAR(os_statvfs__doc__, "statvfs($module, /, path)\n" @@ -9440,9 +9436,9 @@ os_statvfs(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject * return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && (defined(HAVE_STATVFS) && defined(HAVE_SYS_STATVFS_H)) */ +#endif /* (defined(HAVE_STATVFS) && defined(HAVE_SYS_STATVFS_H)) */ -#if defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) +#if defined(MS_WINDOWS) PyDoc_STRVAR(os__getdiskusage__doc__, "_getdiskusage($module, /, path)\n" @@ -9504,9 +9500,9 @@ os__getdiskusage(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyOb return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) */ +#endif /* defined(MS_WINDOWS) */ -#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_FPATHCONF) +#if defined(HAVE_FPATHCONF) PyDoc_STRVAR(os_fpathconf__doc__, "fpathconf($module, fd, name, /)\n" @@ -9549,9 +9545,9 @@ os_fpathconf(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_FPATHCONF) */ +#endif /* defined(HAVE_FPATHCONF) */ -#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_PATHCONF) +#if defined(HAVE_PATHCONF) PyDoc_STRVAR(os_pathconf__doc__, "pathconf($module, /, path, name)\n" @@ -9626,9 +9622,9 @@ os_pathconf(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_PATHCONF) */ +#endif /* defined(HAVE_PATHCONF) */ -#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_CONFSTR) +#if defined(HAVE_CONFSTR) PyDoc_STRVAR(os_confstr__doc__, "confstr($module, name, /)\n" @@ -9657,9 +9653,9 @@ os_confstr(PyObject *module, PyObject *arg) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_CONFSTR) */ +#endif /* defined(HAVE_CONFSTR) */ -#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYSCONF) +#if defined(HAVE_SYSCONF) PyDoc_STRVAR(os_sysconf__doc__, "sysconf($module, name, /)\n" @@ -9693,9 +9689,7 @@ os_sysconf(PyObject *module, PyObject *arg) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SYSCONF) */ - -#if defined(HAVE_DEVICE_MACROS) +#endif /* defined(HAVE_SYSCONF) */ PyDoc_STRVAR(os_abort__doc__, "abort($module, /)\n" @@ -9718,9 +9712,7 @@ os_abort(PyObject *module, PyObject *Py_UNUSED(ignored)) return os_abort_impl(module); } -#endif /* defined(HAVE_DEVICE_MACROS) */ - -#if defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) +#if defined(MS_WINDOWS) PyDoc_STRVAR(os_startfile__doc__, "startfile($module, /, filepath, operation=,\n" @@ -9863,9 +9855,9 @@ os_startfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) */ +#endif /* defined(MS_WINDOWS) */ -#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_GETLOADAVG) +#if defined(HAVE_GETLOADAVG) PyDoc_STRVAR(os_getloadavg__doc__, "getloadavg($module, /)\n" @@ -9889,9 +9881,7 @@ os_getloadavg(PyObject *module, PyObject *Py_UNUSED(ignored)) return os_getloadavg_impl(module); } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_GETLOADAVG) */ - -#if defined(HAVE_DEVICE_MACROS) +#endif /* defined(HAVE_GETLOADAVG) */ PyDoc_STRVAR(os_device_encoding__doc__, "device_encoding($module, /, fd)\n" @@ -9954,9 +9944,7 @@ os_device_encoding(PyObject *module, PyObject *const *args, Py_ssize_t nargs, Py return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) */ - -#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SETRESUID) +#if defined(HAVE_SETRESUID) PyDoc_STRVAR(os_setresuid__doc__, "setresuid($module, ruid, euid, suid, /)\n" @@ -9996,9 +9984,9 @@ os_setresuid(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SETRESUID) */ +#endif /* defined(HAVE_SETRESUID) */ -#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_SETRESGID) +#if defined(HAVE_SETRESGID) PyDoc_STRVAR(os_setresgid__doc__, "setresgid($module, rgid, egid, sgid, /)\n" @@ -10038,9 +10026,9 @@ os_setresgid(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_SETRESGID) */ +#endif /* defined(HAVE_SETRESGID) */ -#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_GETRESUID) +#if defined(HAVE_GETRESUID) PyDoc_STRVAR(os_getresuid__doc__, "getresuid($module, /)\n" @@ -10060,9 +10048,9 @@ os_getresuid(PyObject *module, PyObject *Py_UNUSED(ignored)) return os_getresuid_impl(module); } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_GETRESUID) */ +#endif /* defined(HAVE_GETRESUID) */ -#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_GETRESGID) +#if defined(HAVE_GETRESGID) PyDoc_STRVAR(os_getresgid__doc__, "getresgid($module, /)\n" @@ -10082,9 +10070,9 @@ os_getresgid(PyObject *module, PyObject *Py_UNUSED(ignored)) return os_getresgid_impl(module); } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_GETRESGID) */ +#endif /* defined(HAVE_GETRESGID) */ -#if defined(HAVE_DEVICE_MACROS) && defined(USE_XATTRS) +#if defined(USE_XATTRS) PyDoc_STRVAR(os_getxattr__doc__, "getxattr($module, /, path, attribute, *, follow_symlinks=True)\n" @@ -10168,9 +10156,9 @@ os_getxattr(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(USE_XATTRS) */ +#endif /* defined(USE_XATTRS) */ -#if defined(HAVE_DEVICE_MACROS) && defined(USE_XATTRS) +#if defined(USE_XATTRS) PyDoc_STRVAR(os_setxattr__doc__, "setxattr($module, /, path, attribute, value, flags=0, *,\n" @@ -10277,9 +10265,9 @@ os_setxattr(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(USE_XATTRS) */ +#endif /* defined(USE_XATTRS) */ -#if defined(HAVE_DEVICE_MACROS) && defined(USE_XATTRS) +#if defined(USE_XATTRS) PyDoc_STRVAR(os_removexattr__doc__, "removexattr($module, /, path, attribute, *, follow_symlinks=True)\n" @@ -10363,9 +10351,9 @@ os_removexattr(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObje return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(USE_XATTRS) */ +#endif /* defined(USE_XATTRS) */ -#if defined(HAVE_DEVICE_MACROS) && defined(USE_XATTRS) +#if defined(USE_XATTRS) PyDoc_STRVAR(os_listxattr__doc__, "listxattr($module, /, path=None, *, follow_symlinks=True)\n" @@ -10452,9 +10440,7 @@ os_listxattr(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(USE_XATTRS) */ - -#if defined(HAVE_DEVICE_MACROS) +#endif /* defined(USE_XATTRS) */ PyDoc_STRVAR(os_urandom__doc__, "urandom($module, size, /)\n" @@ -10492,9 +10478,7 @@ os_urandom(PyObject *module, PyObject *arg) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) */ - -#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_MEMFD_CREATE) +#if defined(HAVE_MEMFD_CREATE) PyDoc_STRVAR(os_memfd_create__doc__, "memfd_create($module, /, name, flags=MFD_CLOEXEC)\n" @@ -10565,9 +10549,9 @@ os_memfd_create(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObj return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_MEMFD_CREATE) */ +#endif /* defined(HAVE_MEMFD_CREATE) */ -#if defined(HAVE_DEVICE_MACROS) && (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) +#if (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) PyDoc_STRVAR(os_eventfd__doc__, "eventfd($module, /, initval, flags=EFD_CLOEXEC)\n" @@ -10636,9 +10620,9 @@ os_eventfd(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject * return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) */ +#endif /* (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) */ -#if defined(HAVE_DEVICE_MACROS) && (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) +#if (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) PyDoc_STRVAR(os_eventfd_read__doc__, "eventfd_read($module, /, fd)\n" @@ -10697,9 +10681,9 @@ os_eventfd_read(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObj return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) */ +#endif /* (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) */ -#if defined(HAVE_DEVICE_MACROS) && (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) +#if (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) PyDoc_STRVAR(os_eventfd_write__doc__, "eventfd_write($module, /, fd, value)\n" @@ -10762,9 +10746,9 @@ os_eventfd_write(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyOb return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) */ +#endif /* (defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)) */ -#if defined(HAVE_DEVICE_MACROS) && (defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL)) +#if (defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL)) PyDoc_STRVAR(os_get_terminal_size__doc__, "get_terminal_size($module, fd=, /)\n" @@ -10813,9 +10797,7 @@ os_get_terminal_size(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && (defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL)) */ - -#if defined(HAVE_DEVICE_MACROS) +#endif /* (defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL)) */ PyDoc_STRVAR(os_cpu_count__doc__, "cpu_count($module, /)\n" @@ -10837,10 +10819,6 @@ os_cpu_count(PyObject *module, PyObject *Py_UNUSED(ignored)) return os_cpu_count_impl(module); } -#endif /* defined(HAVE_DEVICE_MACROS) */ - -#if defined(HAVE_DEVICE_MACROS) - PyDoc_STRVAR(os_get_inheritable__doc__, "get_inheritable($module, fd, /)\n" "--\n" @@ -10874,10 +10852,6 @@ os_get_inheritable(PyObject *module, PyObject *arg) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) */ - -#if defined(HAVE_DEVICE_MACROS) - PyDoc_STRVAR(os_set_inheritable__doc__, "set_inheritable($module, fd, inheritable, /)\n" "--\n" @@ -10914,9 +10888,7 @@ os_set_inheritable(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) */ - -#if defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) +#if defined(MS_WINDOWS) PyDoc_STRVAR(os_get_handle_inheritable__doc__, "get_handle_inheritable($module, handle, /)\n" @@ -10950,9 +10922,9 @@ os_get_handle_inheritable(PyObject *module, PyObject *arg) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) */ +#endif /* defined(MS_WINDOWS) */ -#if defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) +#if defined(MS_WINDOWS) PyDoc_STRVAR(os_set_handle_inheritable__doc__, "set_handle_inheritable($module, handle, inheritable, /)\n" @@ -10984,9 +10956,7 @@ os_set_handle_inheritable(PyObject *module, PyObject *const *args, Py_ssize_t na return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) */ - -#if defined(HAVE_DEVICE_MACROS) +#endif /* defined(MS_WINDOWS) */ PyDoc_STRVAR(os_get_blocking__doc__, "get_blocking($module, fd, /)\n" @@ -11023,10 +10993,6 @@ os_get_blocking(PyObject *module, PyObject *arg) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) */ - -#if defined(HAVE_DEVICE_MACROS) - PyDoc_STRVAR(os_set_blocking__doc__, "set_blocking($module, fd, blocking, /)\n" "--\n" @@ -11066,10 +11032,6 @@ os_set_blocking(PyObject *module, PyObject *const *args, Py_ssize_t nargs) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) */ - -#if defined(HAVE_DEVICE_MACROS) - PyDoc_STRVAR(os_DirEntry_is_symlink__doc__, "is_symlink($self, /)\n" "--\n" @@ -11102,10 +11064,6 @@ os_DirEntry_is_symlink(DirEntry *self, PyTypeObject *defining_class, PyObject *c return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) */ - -#if defined(HAVE_DEVICE_MACROS) - PyDoc_STRVAR(os_DirEntry_is_junction__doc__, "is_junction($self, /)\n" "--\n" @@ -11134,10 +11092,6 @@ os_DirEntry_is_junction(DirEntry *self, PyObject *Py_UNUSED(ignored)) return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) */ - -#if defined(HAVE_DEVICE_MACROS) - PyDoc_STRVAR(os_DirEntry_stat__doc__, "stat($self, /, *, follow_symlinks=True)\n" "--\n" @@ -11202,10 +11156,6 @@ os_DirEntry_stat(DirEntry *self, PyTypeObject *defining_class, PyObject *const * return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) */ - -#if defined(HAVE_DEVICE_MACROS) - PyDoc_STRVAR(os_DirEntry_is_dir__doc__, "is_dir($self, /, *, follow_symlinks=True)\n" "--\n" @@ -11275,10 +11225,6 @@ os_DirEntry_is_dir(DirEntry *self, PyTypeObject *defining_class, PyObject *const return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) */ - -#if defined(HAVE_DEVICE_MACROS) - PyDoc_STRVAR(os_DirEntry_is_file__doc__, "is_file($self, /, *, follow_symlinks=True)\n" "--\n" @@ -11348,10 +11294,6 @@ os_DirEntry_is_file(DirEntry *self, PyTypeObject *defining_class, PyObject *cons return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) */ - -#if defined(HAVE_DEVICE_MACROS) - PyDoc_STRVAR(os_DirEntry_inode__doc__, "inode($self, /)\n" "--\n" @@ -11370,10 +11312,6 @@ os_DirEntry_inode(DirEntry *self, PyObject *Py_UNUSED(ignored)) return os_DirEntry_inode_impl(self); } -#endif /* defined(HAVE_DEVICE_MACROS) */ - -#if defined(HAVE_DEVICE_MACROS) - PyDoc_STRVAR(os_DirEntry___fspath____doc__, "__fspath__($self, /)\n" "--\n" @@ -11392,10 +11330,6 @@ os_DirEntry___fspath__(DirEntry *self, PyObject *Py_UNUSED(ignored)) return os_DirEntry___fspath___impl(self); } -#endif /* defined(HAVE_DEVICE_MACROS) */ - -#if defined(HAVE_DEVICE_MACROS) - PyDoc_STRVAR(os_scandir__doc__, "scandir($module, /, path=None)\n" "--\n" @@ -11467,10 +11401,6 @@ os_scandir(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject * return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) */ - -#if defined(HAVE_DEVICE_MACROS) - PyDoc_STRVAR(os_fspath__doc__, "fspath($module, /, path)\n" "--\n" @@ -11530,9 +11460,7 @@ os_fspath(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *k return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) */ - -#if defined(HAVE_DEVICE_MACROS) && defined(HAVE_GETRANDOM_SYSCALL) +#if defined(HAVE_GETRANDOM_SYSCALL) PyDoc_STRVAR(os_getrandom__doc__, "getrandom($module, /, size, flags=0)\n" @@ -11610,9 +11538,9 @@ os_getrandom(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(HAVE_GETRANDOM_SYSCALL) */ +#endif /* defined(HAVE_GETRANDOM_SYSCALL) */ -#if defined(HAVE_DEVICE_MACROS) && (defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_APP) || defined(MS_WINDOWS_SYSTEM)) +#if (defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_APP) || defined(MS_WINDOWS_SYSTEM)) PyDoc_STRVAR(os__add_dll_directory__doc__, "_add_dll_directory($module, /, path)\n" @@ -11681,9 +11609,9 @@ os__add_dll_directory(PyObject *module, PyObject *const *args, Py_ssize_t nargs, return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && (defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_APP) || defined(MS_WINDOWS_SYSTEM)) */ +#endif /* (defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_APP) || defined(MS_WINDOWS_SYSTEM)) */ -#if defined(HAVE_DEVICE_MACROS) && (defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_APP) || defined(MS_WINDOWS_SYSTEM)) +#if (defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_APP) || defined(MS_WINDOWS_SYSTEM)) PyDoc_STRVAR(os__remove_dll_directory__doc__, "_remove_dll_directory($module, /, cookie)\n" @@ -11744,9 +11672,9 @@ os__remove_dll_directory(PyObject *module, PyObject *const *args, Py_ssize_t nar return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && (defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_APP) || defined(MS_WINDOWS_SYSTEM)) */ +#endif /* (defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_APP) || defined(MS_WINDOWS_SYSTEM)) */ -#if defined(HAVE_DEVICE_MACROS) && (defined(WIFEXITED) || defined(MS_WINDOWS)) +#if (defined(WIFEXITED) || defined(MS_WINDOWS)) PyDoc_STRVAR(os_waitstatus_to_exitcode__doc__, "waitstatus_to_exitcode($module, /, status)\n" @@ -11815,9 +11743,9 @@ os_waitstatus_to_exitcode(PyObject *module, PyObject *const *args, Py_ssize_t na return return_value; } -#endif /* defined(HAVE_DEVICE_MACROS) && (defined(WIFEXITED) || defined(MS_WINDOWS)) */ +#endif /* (defined(WIFEXITED) || defined(MS_WINDOWS)) */ -#if defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) +#if defined(MS_WINDOWS) PyDoc_STRVAR(os__supports_virtual_terminal__doc__, "_supports_virtual_terminal($module, /)\n" @@ -11837,7 +11765,7 @@ os__supports_virtual_terminal(PyObject *module, PyObject *Py_UNUSED(ignored)) return os__supports_virtual_terminal_impl(module); } -#endif /* defined(HAVE_DEVICE_MACROS) && defined(MS_WINDOWS) */ +#endif /* defined(MS_WINDOWS) */ #ifndef OS_TTYNAME_METHODDEF #define OS_TTYNAME_METHODDEF @@ -12335,10 +12263,6 @@ os__supports_virtual_terminal(PyObject *module, PyObject *Py_UNUSED(ignored)) #define OS_UNSETENV_METHODDEF #endif /* !defined(OS_UNSETENV_METHODDEF) */ -#ifndef OS_STRERROR_METHODDEF - #define OS_STRERROR_METHODDEF -#endif /* !defined(OS_STRERROR_METHODDEF) */ - #ifndef OS_WCOREDUMP_METHODDEF #define OS_WCOREDUMP_METHODDEF #endif /* !defined(OS_WCOREDUMP_METHODDEF) */ @@ -12399,10 +12323,6 @@ os__supports_virtual_terminal(PyObject *module, PyObject *Py_UNUSED(ignored)) #define OS_SYSCONF_METHODDEF #endif /* !defined(OS_SYSCONF_METHODDEF) */ -#ifndef OS_ABORT_METHODDEF - #define OS_ABORT_METHODDEF -#endif /* !defined(OS_ABORT_METHODDEF) */ - #ifndef OS_STARTFILE_METHODDEF #define OS_STARTFILE_METHODDEF #endif /* !defined(OS_STARTFILE_METHODDEF) */ @@ -12411,10 +12331,6 @@ os__supports_virtual_terminal(PyObject *module, PyObject *Py_UNUSED(ignored)) #define OS_GETLOADAVG_METHODDEF #endif /* !defined(OS_GETLOADAVG_METHODDEF) */ -#ifndef OS_DEVICE_ENCODING_METHODDEF - #define OS_DEVICE_ENCODING_METHODDEF -#endif /* !defined(OS_DEVICE_ENCODING_METHODDEF) */ - #ifndef OS_SETRESUID_METHODDEF #define OS_SETRESUID_METHODDEF #endif /* !defined(OS_SETRESUID_METHODDEF) */ @@ -12447,10 +12363,6 @@ os__supports_virtual_terminal(PyObject *module, PyObject *Py_UNUSED(ignored)) #define OS_LISTXATTR_METHODDEF #endif /* !defined(OS_LISTXATTR_METHODDEF) */ -#ifndef OS_URANDOM_METHODDEF - #define OS_URANDOM_METHODDEF -#endif /* !defined(OS_URANDOM_METHODDEF) */ - #ifndef OS_MEMFD_CREATE_METHODDEF #define OS_MEMFD_CREATE_METHODDEF #endif /* !defined(OS_MEMFD_CREATE_METHODDEF) */ @@ -12471,18 +12383,6 @@ os__supports_virtual_terminal(PyObject *module, PyObject *Py_UNUSED(ignored)) #define OS_GET_TERMINAL_SIZE_METHODDEF #endif /* !defined(OS_GET_TERMINAL_SIZE_METHODDEF) */ -#ifndef OS_CPU_COUNT_METHODDEF - #define OS_CPU_COUNT_METHODDEF -#endif /* !defined(OS_CPU_COUNT_METHODDEF) */ - -#ifndef OS_GET_INHERITABLE_METHODDEF - #define OS_GET_INHERITABLE_METHODDEF -#endif /* !defined(OS_GET_INHERITABLE_METHODDEF) */ - -#ifndef OS_SET_INHERITABLE_METHODDEF - #define OS_SET_INHERITABLE_METHODDEF -#endif /* !defined(OS_SET_INHERITABLE_METHODDEF) */ - #ifndef OS_GET_HANDLE_INHERITABLE_METHODDEF #define OS_GET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_GET_HANDLE_INHERITABLE_METHODDEF) */ @@ -12491,50 +12391,6 @@ os__supports_virtual_terminal(PyObject *module, PyObject *Py_UNUSED(ignored)) #define OS_SET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ -#ifndef OS_GET_BLOCKING_METHODDEF - #define OS_GET_BLOCKING_METHODDEF -#endif /* !defined(OS_GET_BLOCKING_METHODDEF) */ - -#ifndef OS_SET_BLOCKING_METHODDEF - #define OS_SET_BLOCKING_METHODDEF -#endif /* !defined(OS_SET_BLOCKING_METHODDEF) */ - -#ifndef OS_DIRENTRY_IS_SYMLINK_METHODDEF - #define OS_DIRENTRY_IS_SYMLINK_METHODDEF -#endif /* !defined(OS_DIRENTRY_IS_SYMLINK_METHODDEF) */ - -#ifndef OS_DIRENTRY_IS_JUNCTION_METHODDEF - #define OS_DIRENTRY_IS_JUNCTION_METHODDEF -#endif /* !defined(OS_DIRENTRY_IS_JUNCTION_METHODDEF) */ - -#ifndef OS_DIRENTRY_STAT_METHODDEF - #define OS_DIRENTRY_STAT_METHODDEF -#endif /* !defined(OS_DIRENTRY_STAT_METHODDEF) */ - -#ifndef OS_DIRENTRY_IS_DIR_METHODDEF - #define OS_DIRENTRY_IS_DIR_METHODDEF -#endif /* !defined(OS_DIRENTRY_IS_DIR_METHODDEF) */ - -#ifndef OS_DIRENTRY_IS_FILE_METHODDEF - #define OS_DIRENTRY_IS_FILE_METHODDEF -#endif /* !defined(OS_DIRENTRY_IS_FILE_METHODDEF) */ - -#ifndef OS_DIRENTRY_INODE_METHODDEF - #define OS_DIRENTRY_INODE_METHODDEF -#endif /* !defined(OS_DIRENTRY_INODE_METHODDEF) */ - -#ifndef OS_DIRENTRY___FSPATH___METHODDEF - #define OS_DIRENTRY___FSPATH___METHODDEF -#endif /* !defined(OS_DIRENTRY___FSPATH___METHODDEF) */ - -#ifndef OS_SCANDIR_METHODDEF - #define OS_SCANDIR_METHODDEF -#endif /* !defined(OS_SCANDIR_METHODDEF) */ - -#ifndef OS_FSPATH_METHODDEF - #define OS_FSPATH_METHODDEF -#endif /* !defined(OS_FSPATH_METHODDEF) */ - #ifndef OS_GETRANDOM_METHODDEF #define OS_GETRANDOM_METHODDEF #endif /* !defined(OS_GETRANDOM_METHODDEF) */ @@ -12554,4 +12410,4 @@ os__supports_virtual_terminal(PyObject *module, PyObject *Py_UNUSED(ignored)) #ifndef OS__SUPPORTS_VIRTUAL_TERMINAL_METHODDEF #define OS__SUPPORTS_VIRTUAL_TERMINAL_METHODDEF #endif /* !defined(OS__SUPPORTS_VIRTUAL_TERMINAL_METHODDEF) */ -/*[clinic end generated code: output=b80228806fba7dc3 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=dfcaffd690b9a556 input=a9049054013a1b77]*/ From acd102eb1c1b130c3c5f5e3a0422d33c44d1b947 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 17 Dec 2023 12:26:01 +0200 Subject: [PATCH 5/6] Only test NODEV on Linux. --- Lib/test/test_posix.py | 4 ++-- Modules/posixmodule.c | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index d2726e38d6db3b..4eb50a776eea96 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -724,8 +724,8 @@ def test_makedev(self): self.assertRaises((ValueError, OverflowError), posix.makedev, x, minor) self.assertRaises((ValueError, OverflowError), posix.makedev, major, x) - if hasattr(posix, '_NODEV'): - NODEV = posix._NODEV + if sys.platform == 'linux': + NODEV = -1 self.assertEqual(posix.major(NODEV), NODEV) self.assertEqual(posix.minor(NODEV), NODEV) diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 66b6c6b6b74275..244fdf53504d4c 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -17034,10 +17034,6 @@ all_ins(PyObject *m) if (PyModule_AddIntConstant(m, "_LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR", LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR)) return -1; #endif -#ifdef NODEV - if (PyModule_AddIntConstant(m, "_NODEV", NODEV)) return -1; -#endif - return 0; } From c0abdbb25027d7d430899ecf827bcad8bcc8a25c Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 24 May 2024 13:15:10 +0300 Subject: [PATCH 6/6] Address review comments and small refactoring. --- Lib/test/test_posix.py | 1 + .../2022-03-10-16-47-57.bpo-45767.ywmyo1.rst | 2 +- Modules/posixmodule.c | 47 ++++++++++--------- 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index 493553f7b53d68..908354cb8574d1 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -729,6 +729,7 @@ def test_makedev(self): NODEV = -1 self.assertEqual(posix.major(NODEV), NODEV) self.assertEqual(posix.minor(NODEV), NODEV) + self.assertEqual(posix.makedev(NODEV, NODEV), NODEV) def _test_all_chown_common(self, chown_func, first_param, stat_func): """Common code for chown, fchown and lchown tests.""" diff --git a/Misc/NEWS.d/next/Library/2022-03-10-16-47-57.bpo-45767.ywmyo1.rst b/Misc/NEWS.d/next/Library/2022-03-10-16-47-57.bpo-45767.ywmyo1.rst index cd71c84534863f..0cdf1e84157777 100644 --- a/Misc/NEWS.d/next/Library/2022-03-10-16-47-57.bpo-45767.ywmyo1.rst +++ b/Misc/NEWS.d/next/Library/2022-03-10-16-47-57.bpo-45767.ywmyo1.rst @@ -1,3 +1,3 @@ Fix integer conversion in :func:`os.major`, :func:`os.minor`, and :func:`os.makedev`. Support device numbers larger than ``2**63-1``. Support -non-existent device number. +non-existent device number (``NODEV``). diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index b149401dde3ad3..b80deceb26e4d2 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -12515,6 +12515,28 @@ os_mknod_impl(PyObject *module, path_t *path, int mode, dev_t device, #endif /* defined(HAVE_MKNOD) && defined(HAVE_MAKEDEV) */ +static PyObject * +major_minor_conv(unsigned int value) +{ +#ifdef NODEV + if (value == (unsigned int)NODEV) { + return PyLong_FromLong((int)NODEV); + } +#endif + return PyLong_FromUnsignedLong(value); +} + +static int +major_minor_check(dev_t value) +{ +#ifdef NODEV + if (value == NODEV) { + return 1; + } +#endif + return (dev_t)(unsigned int)value == value; +} + #ifdef HAVE_DEVICE_MACROS /*[clinic input] os.major @@ -12529,13 +12551,7 @@ static PyObject * os_major_impl(PyObject *module, dev_t device) /*[clinic end generated code: output=4071ffee17647891 input=b1a0a14ec9448229]*/ { - unsigned int result = major(device); -#ifdef NODEV - if (result == (unsigned int)NODEV) { - return PyLong_FromLong((int)NODEV); - } -#endif - return PyLong_FromUnsignedLong(result); + return major_minor_conv(major(device)); } @@ -12552,13 +12568,7 @@ static PyObject * os_minor_impl(PyObject *module, dev_t device) /*[clinic end generated code: output=306cb78e3bc5004f input=2f686e463682a9da]*/ { - unsigned int result = minor(device); -#ifdef NODEV - if (result == (unsigned int)NODEV) { - return PyLong_FromLong((int)NODEV); - } -#endif - return PyLong_FromUnsignedLong(result); + return major_minor_conv(minor(device)); } @@ -12576,14 +12586,7 @@ static dev_t os_makedev_impl(PyObject *module, dev_t major, dev_t minor) /*[clinic end generated code: output=cad6125c51f5af80 input=2146126ec02e55c1]*/ { -#ifdef NODEV - if ((major != NODEV && (dev_t)(unsigned int)major != major) || - (minor != NODEV && (dev_t)(unsigned int)minor != minor)) -#else - if ((dev_t)(unsigned int)major != major) || - (dev_t)(unsigned int)minor != minor)) -#endif - { + if (!major_minor_check(major) || !major_minor_check(minor)) { PyErr_SetString(PyExc_OverflowError, "Python int too large to convert to C unsigned int"); return (dev_t)-1;