summaryrefslogtreecommitdiffstats
path: root/Modules/clinic
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2024-06-04 16:36:37 (GMT)
committerGitHub <noreply@github.com>2024-06-04 16:36:37 (GMT)
commit7111d9605f9db7aa0b095bb8ece7ccc0b8115c3f (patch)
tree441b89fa6f2b2e3c074f323fcf0ca44ab113babf /Modules/clinic
parent5f03f0913413ecc4942367cf62ce3a5a5b5d84a5 (diff)
downloadcpython-7111d9605f9db7aa0b095bb8ece7ccc0b8115c3f.zip
cpython-7111d9605f9db7aa0b095bb8ece7ccc0b8115c3f.tar.gz
cpython-7111d9605f9db7aa0b095bb8ece7ccc0b8115c3f.tar.bz2
gh-89928: Fix integer conversion of device numbers (GH-31794)
Fix os.major(), os.minor() and os.makedev(). Support device numbers larger than 2**63-1. Support non-existent device number (NODEV).
Diffstat (limited to 'Modules/clinic')
-rw-r--r--Modules/clinic/posixmodule.c.h32
1 files changed, 10 insertions, 22 deletions
diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h
index c7a447b..83dcc7a 100644
--- a/Modules/clinic/posixmodule.c.h
+++ b/Modules/clinic/posixmodule.c.h
@@ -8685,7 +8685,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 *
@@ -8693,16 +8693,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;
@@ -8721,7 +8716,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 *
@@ -8729,16 +8724,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;
@@ -8758,25 +8748,23 @@ PyDoc_STRVAR(os_makedev__doc__,
{"makedev", _PyCFunction_CAST(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);
@@ -12795,4 +12783,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=300bd1c54dc43765 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=49c2d7a65f7a9f3b input=a9049054013a1b77]*/