summaryrefslogtreecommitdiffstats
path: root/Modules/clinic/posixmodule.c.h
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2024-06-04 17:12:13 (GMT)
committerGitHub <noreply@github.com>2024-06-04 17:12:13 (GMT)
commitf98ec7574a5ee3dc5db996a5037483f57465e18d (patch)
tree721eea5c4417390ad42e92b5aed18adad2eac90b /Modules/clinic/posixmodule.c.h
parent0e150c36dee1734a6a60f1ebd924e90fb3fe1458 (diff)
downloadcpython-f98ec7574a5ee3dc5db996a5037483f57465e18d.zip
cpython-f98ec7574a5ee3dc5db996a5037483f57465e18d.tar.gz
cpython-f98ec7574a5ee3dc5db996a5037483f57465e18d.tar.bz2
[3.12] gh-89928: Fix integer conversion of device numbers (GH-31794) (GH-120054)
Fix os.major(), os.minor() and os.makedev(). Support device numbers larger than 2**63-1. Support non-existent device number (NODEV). (cherry picked from commit 7111d9605f9db7aa0b095bb8ece7ccc0b8115c3f)
Diffstat (limited to 'Modules/clinic/posixmodule.c.h')
-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 c832ae3..02cb95a 100644
--- a/Modules/clinic/posixmodule.c.h
+++ b/Modules/clinic/posixmodule.c.h
@@ -7958,7 +7958,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 *
@@ -7966,16 +7966,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;
@@ -7994,7 +7989,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 *
@@ -8002,16 +7997,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;
@@ -8031,25 +8021,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);
@@ -12014,4 +12002,4 @@ exit:
#ifndef OS_WAITSTATUS_TO_EXITCODE_METHODDEF
#define OS_WAITSTATUS_TO_EXITCODE_METHODDEF
#endif /* !defined(OS_WAITSTATUS_TO_EXITCODE_METHODDEF) */
-/*[clinic end generated code: output=485aa0aed01eb699 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=e2cf3ab750346780 input=a9049054013a1b77]*/