Nicholas Marriott added the comment: Okay, looks like my guess was correct. The diff at the end of this mail makes it work on OpenBSD/amd64 and it continues to work on i386, but it will probably break Linux (due to the problem it was working around mentioned in the comment at the beginning). I don't know enough about the Python build system to suggest a correct fix. (SUSv3 seems to suggest ioctl's request should be int, so perhaps OpenBSD is ultimately at fault.)
fcntl_ioctl in fcntlmodule.c seems to have some other potential problems on 64-bit archs too, as it seems to coerce the ioctl argument (potentially a pointer) into an int. -- Nicholas. --- fcntlmodule.c.orig Tue Nov 20 09:39:12 2007 +++ fcntlmodule.c Tue Nov 20 09:59:50 2007 @@ -101,7 +101,7 @@ the signed int 'code' variable, because Python turns 0x8000000 into a large positive number (PyLong, or PyInt on 64-bit platforms,) whereas C expects it to be a negative int */ - int code; + unsigned long code; int arg; int ret; char *str; @@ -109,7 +109,7 @@ int mutate_arg = 1; char buf[IOCTL_BUFSZ+1]; /* argument plus NUL byte */ - if (PyArg_ParseTuple(args, "O&Iw#|i:ioctl", + if (PyArg_ParseTuple(args, "O&Lw#|i:ioctl", conv_descriptor, &fd, &code, &str, &len, &mutate_arg)) { char *arg; @@ -160,7 +160,7 @@ } PyErr_Clear(); - if (PyArg_ParseTuple(args, "O&Is#:ioctl", + if (PyArg_ParseTuple(args, "O&Ls#:ioctl", conv_descriptor, &fd, &code, &str, &len)) { if (len > IOCTL_BUFSZ) { PyErr_SetString(PyExc_ValueError, @@ -182,7 +182,7 @@ PyErr_Clear(); arg = 0; if (!PyArg_ParseTuple(args, - "O&I|i;ioctl requires a file or file descriptor," + "O&L|i;ioctl requires a file or file descriptor," " an integer and optionally an integer or buffer argument", conv_descriptor, &fd, &code, &arg)) { return NULL; __________________________________ Tracker <[EMAIL PROTECTED]> <http://bugs.python.org/issue1471> __________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com