mirror of https://github.com/python/cpython
[3.13] Revert "[3.13] gh-69214: Fix fcntl.ioctl() request type (GH-119498) (… (#119906)
Revert "[3.13] gh-69214: Fix fcntl.ioctl() request type (GH-119498) (#119504)"
This reverts commit 0bab0b3a53
.
The change modified how negative values, like termios.TIOCSWINSZ, was
treated and is actually backward incompatible.
This commit is contained in:
parent
48054d2306
commit
4e147caf3f
|
@ -1,3 +0,0 @@
|
||||||
Fix ``fcntl.ioctl()`` *request* parameter: use an ``unsigned long`` instead of
|
|
||||||
an ``unsigned int`` for the *request* parameter of :func:`fcntl.ioctl` to
|
|
||||||
support requests larger than ``UINT_MAX``. Patch by Victor Stinner.
|
|
|
@ -96,7 +96,7 @@ PyDoc_STRVAR(fcntl_ioctl__doc__,
|
||||||
{"ioctl", (PyCFunction)(void(*)(void))fcntl_ioctl, METH_FASTCALL, fcntl_ioctl__doc__},
|
{"ioctl", (PyCFunction)(void(*)(void))fcntl_ioctl, METH_FASTCALL, fcntl_ioctl__doc__},
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
fcntl_ioctl_impl(PyObject *module, int fd, unsigned long code,
|
fcntl_ioctl_impl(PyObject *module, int fd, unsigned int code,
|
||||||
PyObject *ob_arg, int mutate_arg);
|
PyObject *ob_arg, int mutate_arg);
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -104,7 +104,7 @@ fcntl_ioctl(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
||||||
{
|
{
|
||||||
PyObject *return_value = NULL;
|
PyObject *return_value = NULL;
|
||||||
int fd;
|
int fd;
|
||||||
unsigned long code;
|
unsigned int code;
|
||||||
PyObject *ob_arg = NULL;
|
PyObject *ob_arg = NULL;
|
||||||
int mutate_arg = 1;
|
int mutate_arg = 1;
|
||||||
|
|
||||||
|
@ -120,11 +120,10 @@ fcntl_ioctl(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
if (!PyLong_Check(args[1])) {
|
code = (unsigned int)PyLong_AsUnsignedLongMask(args[1]);
|
||||||
PyErr_Format(PyExc_TypeError, "ioctl() argument 2 must be int, not %T", args[1]);
|
if (code == (unsigned int)-1 && PyErr_Occurred()) {
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
code = PyLong_AsUnsignedLongMask(args[1]);
|
|
||||||
if (nargs < 3) {
|
if (nargs < 3) {
|
||||||
goto skip_optional;
|
goto skip_optional;
|
||||||
}
|
}
|
||||||
|
@ -264,4 +263,4 @@ skip_optional:
|
||||||
exit:
|
exit:
|
||||||
return return_value;
|
return return_value;
|
||||||
}
|
}
|
||||||
/*[clinic end generated code: output=45a56f53fd17ff3c input=a9049054013a1b77]*/
|
/*[clinic end generated code: output=26793691ab1c75ba input=a9049054013a1b77]*/
|
||||||
|
|
|
@ -112,7 +112,7 @@ fcntl_fcntl_impl(PyObject *module, int fd, int code, PyObject *arg)
|
||||||
fcntl.ioctl
|
fcntl.ioctl
|
||||||
|
|
||||||
fd: fildes
|
fd: fildes
|
||||||
request as code: unsigned_long(bitwise=True)
|
request as code: unsigned_int(bitwise=True)
|
||||||
arg as ob_arg: object(c_default='NULL') = 0
|
arg as ob_arg: object(c_default='NULL') = 0
|
||||||
mutate_flag as mutate_arg: bool = True
|
mutate_flag as mutate_arg: bool = True
|
||||||
/
|
/
|
||||||
|
@ -148,9 +148,9 @@ code.
|
||||||
[clinic start generated code]*/
|
[clinic start generated code]*/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
fcntl_ioctl_impl(PyObject *module, int fd, unsigned long code,
|
fcntl_ioctl_impl(PyObject *module, int fd, unsigned int code,
|
||||||
PyObject *ob_arg, int mutate_arg)
|
PyObject *ob_arg, int mutate_arg)
|
||||||
/*[clinic end generated code: output=3d8eb6828666cea1 input=cee70f6a27311e58]*/
|
/*[clinic end generated code: output=7f7f5840c65991be input=967b4a4cbeceb0a8]*/
|
||||||
{
|
{
|
||||||
#define IOCTL_BUFSZ 1024
|
#define IOCTL_BUFSZ 1024
|
||||||
/* We use the unsigned non-checked 'I' format for the 'code' parameter
|
/* We use the unsigned non-checked 'I' format for the 'code' parameter
|
||||||
|
|
Loading…
Reference in New Issue