mirror of https://github.com/python/cpython
gh-116646, AC: Always use PyObject_AsFileDescriptor() in fildes (#116806)
The fildes converter of Argument Clinic now always call PyObject_AsFileDescriptor(), not only for the limited C API. The _PyLong_FileDescriptor_Converter() converter stays as a fallback when PyObject_AsFileDescriptor() cannot be used.
This commit is contained in:
parent
2a54c4b25e
commit
a76288ad9b
|
@ -7,7 +7,6 @@ preserve
|
|||
# include "pycore_runtime.h" // _Py_ID()
|
||||
#endif
|
||||
#include "pycore_abstract.h" // _PyNumber_Index()
|
||||
#include "pycore_fileutils.h" // _PyLong_FileDescriptor_Converter()
|
||||
#include "pycore_long.h" // _PyLong_UnsignedInt_Converter()
|
||||
#include "pycore_modsupport.h" // _PyArg_UnpackKeywords()
|
||||
|
||||
|
@ -481,7 +480,8 @@ os_fchdir(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *k
|
|||
if (!args) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = os_fchdir_impl(module, fd);
|
||||
|
@ -1024,7 +1024,8 @@ os_fsync(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kw
|
|||
if (!args) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = os_fsync_impl(module, fd);
|
||||
|
@ -1107,7 +1108,8 @@ os_fdatasync(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject
|
|||
if (!args) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = os_fdatasync_impl(module, fd);
|
||||
|
@ -4531,7 +4533,8 @@ os_grantpt(PyObject *module, PyObject *arg)
|
|||
PyObject *return_value = NULL;
|
||||
int fd;
|
||||
|
||||
if (!_PyLong_FileDescriptor_Converter(arg, &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(arg);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = os_grantpt_impl(module, fd);
|
||||
|
@ -4567,7 +4570,8 @@ os_unlockpt(PyObject *module, PyObject *arg)
|
|||
PyObject *return_value = NULL;
|
||||
int fd;
|
||||
|
||||
if (!_PyLong_FileDescriptor_Converter(arg, &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(arg);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = os_unlockpt_impl(module, fd);
|
||||
|
@ -4604,7 +4608,8 @@ os_ptsname(PyObject *module, PyObject *arg)
|
|||
PyObject *return_value = NULL;
|
||||
int fd;
|
||||
|
||||
if (!_PyLong_FileDescriptor_Converter(arg, &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(arg);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = os_ptsname_impl(module, fd);
|
||||
|
@ -4664,7 +4669,8 @@ os_login_tty(PyObject *module, PyObject *arg)
|
|||
PyObject *return_value = NULL;
|
||||
int fd;
|
||||
|
||||
if (!_PyLong_FileDescriptor_Converter(arg, &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(arg);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = os_login_tty_impl(module, fd);
|
||||
|
@ -5881,7 +5887,8 @@ os_setns(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kw
|
|||
if (!args) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
if (!noptargs) {
|
||||
|
@ -6322,7 +6329,8 @@ os_timerfd_settime(PyObject *module, PyObject *const *args, Py_ssize_t nargs, Py
|
|||
if (!args) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
if (!noptargs) {
|
||||
|
@ -6435,7 +6443,8 @@ os_timerfd_settime_ns(PyObject *module, PyObject *const *args, Py_ssize_t nargs,
|
|||
if (!args) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
if (!noptargs) {
|
||||
|
@ -6495,7 +6504,8 @@ os_timerfd_gettime(PyObject *module, PyObject *arg)
|
|||
PyObject *return_value = NULL;
|
||||
int fd;
|
||||
|
||||
if (!_PyLong_FileDescriptor_Converter(arg, &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(arg);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = os_timerfd_gettime_impl(module, fd);
|
||||
|
@ -6529,7 +6539,8 @@ os_timerfd_gettime_ns(PyObject *module, PyObject *arg)
|
|||
PyObject *return_value = NULL;
|
||||
int fd;
|
||||
|
||||
if (!_PyLong_FileDescriptor_Converter(arg, &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(arg);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = os_timerfd_gettime_ns_impl(module, fd);
|
||||
|
@ -9691,7 +9702,8 @@ os_fpathconf(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
|||
if (!_PyArg_CheckPositional("fpathconf", nargs, 2, 2)) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
if (!conv_path_confname(args[1], &name)) {
|
||||
|
@ -10834,7 +10846,8 @@ os_eventfd_read(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObj
|
|||
if (!args) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = os_eventfd_read_impl(module, fd);
|
||||
|
@ -10896,7 +10909,8 @@ os_eventfd_write(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyOb
|
|||
if (!args) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_UnsignedLongLong_Converter(args[1], &value)) {
|
||||
|
@ -12588,4 +12602,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=2965306970f31c5d input=a9049054013a1b77]*/
|
||||
/*[clinic end generated code: output=511f0788a6b90db0 input=a9049054013a1b77]*/
|
||||
|
|
|
@ -6,7 +6,6 @@ preserve
|
|||
# include "pycore_gc.h" // PyGC_Head
|
||||
# include "pycore_runtime.h" // _Py_ID()
|
||||
#endif
|
||||
#include "pycore_fileutils.h" // _PyLong_FileDescriptor_Converter()
|
||||
#include "pycore_long.h" // _PyLong_UnsignedShort_Converter()
|
||||
#include "pycore_modsupport.h" // _PyArg_CheckPositional()
|
||||
|
||||
|
@ -100,7 +99,8 @@ select_poll_register(pollObject *self, PyObject *const *args, Py_ssize_t nargs)
|
|||
if (!_PyArg_CheckPositional("register", nargs, 1, 2)) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
if (nargs < 2) {
|
||||
|
@ -148,7 +148,8 @@ select_poll_modify(pollObject *self, PyObject *const *args, Py_ssize_t nargs)
|
|||
if (!_PyArg_CheckPositional("modify", nargs, 2, 2)) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_UnsignedShort_Converter(args[1], &eventmask)) {
|
||||
|
@ -182,7 +183,8 @@ select_poll_unregister(pollObject *self, PyObject *arg)
|
|||
PyObject *return_value = NULL;
|
||||
int fd;
|
||||
|
||||
if (!_PyLong_FileDescriptor_Converter(arg, &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(arg);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = select_poll_unregister_impl(self, fd);
|
||||
|
@ -268,7 +270,8 @@ select_devpoll_register(devpollObject *self, PyObject *const *args, Py_ssize_t n
|
|||
if (!_PyArg_CheckPositional("register", nargs, 1, 2)) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
if (nargs < 2) {
|
||||
|
@ -318,7 +321,8 @@ select_devpoll_modify(devpollObject *self, PyObject *const *args, Py_ssize_t nar
|
|||
if (!_PyArg_CheckPositional("modify", nargs, 1, 2)) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
if (nargs < 2) {
|
||||
|
@ -356,7 +360,8 @@ select_devpoll_unregister(devpollObject *self, PyObject *arg)
|
|||
PyObject *return_value = NULL;
|
||||
int fd;
|
||||
|
||||
if (!_PyLong_FileDescriptor_Converter(arg, &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(arg);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = select_devpoll_unregister_impl(self, fd);
|
||||
|
@ -730,7 +735,8 @@ select_epoll_register(pyEpoll_Object *self, PyObject *const *args, Py_ssize_t na
|
|||
if (!args) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
if (!noptargs) {
|
||||
|
@ -806,7 +812,8 @@ select_epoll_modify(pyEpoll_Object *self, PyObject *const *args, Py_ssize_t narg
|
|||
if (!args) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
eventmask = (unsigned int)PyLong_AsUnsignedLongMask(args[1]);
|
||||
|
@ -874,7 +881,8 @@ select_epoll_unregister(pyEpoll_Object *self, PyObject *const *args, Py_ssize_t
|
|||
if (!args) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = select_epoll_unregister_impl(self, fd);
|
||||
|
@ -1311,4 +1319,4 @@ exit:
|
|||
#ifndef SELECT_KQUEUE_CONTROL_METHODDEF
|
||||
#define SELECT_KQUEUE_CONTROL_METHODDEF
|
||||
#endif /* !defined(SELECT_KQUEUE_CONTROL_METHODDEF) */
|
||||
/*[clinic end generated code: output=4c2dcb31cb17c2c6 input=a9049054013a1b77]*/
|
||||
/*[clinic end generated code: output=4fc17ae9b6cfdc86 input=a9049054013a1b77]*/
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
preserve
|
||||
[clinic start generated code]*/
|
||||
|
||||
#include "pycore_fileutils.h" // _PyLong_FileDescriptor_Converter()
|
||||
#include "pycore_modsupport.h" // _PyArg_CheckPositional()
|
||||
|
||||
PyDoc_STRVAR(termios_tcgetattr__doc__,
|
||||
|
@ -30,7 +29,8 @@ termios_tcgetattr(PyObject *module, PyObject *arg)
|
|||
PyObject *return_value = NULL;
|
||||
int fd;
|
||||
|
||||
if (!_PyLong_FileDescriptor_Converter(arg, &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(arg);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = termios_tcgetattr_impl(module, fd);
|
||||
|
@ -69,7 +69,8 @@ termios_tcsetattr(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
|||
if (!_PyArg_CheckPositional("tcsetattr", nargs, 3, 3)) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
when = PyLong_AsInt(args[1]);
|
||||
|
@ -108,7 +109,8 @@ termios_tcsendbreak(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
|||
if (!_PyArg_CheckPositional("tcsendbreak", nargs, 2, 2)) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
duration = PyLong_AsInt(args[1]);
|
||||
|
@ -139,7 +141,8 @@ termios_tcdrain(PyObject *module, PyObject *arg)
|
|||
PyObject *return_value = NULL;
|
||||
int fd;
|
||||
|
||||
if (!_PyLong_FileDescriptor_Converter(arg, &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(arg);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = termios_tcdrain_impl(module, fd);
|
||||
|
@ -174,7 +177,8 @@ termios_tcflush(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
|||
if (!_PyArg_CheckPositional("tcflush", nargs, 2, 2)) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
queue = PyLong_AsInt(args[1]);
|
||||
|
@ -213,7 +217,8 @@ termios_tcflow(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
|||
if (!_PyArg_CheckPositional("tcflow", nargs, 2, 2)) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
action = PyLong_AsInt(args[1]);
|
||||
|
@ -246,7 +251,8 @@ termios_tcgetwinsize(PyObject *module, PyObject *arg)
|
|||
PyObject *return_value = NULL;
|
||||
int fd;
|
||||
|
||||
if (!_PyLong_FileDescriptor_Converter(arg, &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(arg);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = termios_tcgetwinsize_impl(module, fd);
|
||||
|
@ -280,7 +286,8 @@ termios_tcsetwinsize(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
|||
if (!_PyArg_CheckPositional("tcsetwinsize", nargs, 2, 2)) {
|
||||
goto exit;
|
||||
}
|
||||
if (!_PyLong_FileDescriptor_Converter(args[0], &fd)) {
|
||||
fd = PyObject_AsFileDescriptor(args[0]);
|
||||
if (fd < 0) {
|
||||
goto exit;
|
||||
}
|
||||
winsz = args[1];
|
||||
|
@ -289,4 +296,4 @@ termios_tcsetwinsize(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
|||
exit:
|
||||
return return_value;
|
||||
}
|
||||
/*[clinic end generated code: output=f31382658135c774 input=a9049054013a1b77]*/
|
||||
/*[clinic end generated code: output=7327a2085972bf59 input=a9049054013a1b77]*/
|
||||
|
|
|
@ -3832,16 +3832,13 @@ class fildes_converter(CConverter):
|
|||
'_PyLong_FileDescriptor_Converter()')
|
||||
|
||||
def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None:
|
||||
if limited_capi:
|
||||
return self.format_code("""
|
||||
{paramname} = PyObject_AsFileDescriptor({argname});
|
||||
if ({paramname} < 0) {{{{
|
||||
goto exit;
|
||||
}}}}
|
||||
""",
|
||||
argname=argname)
|
||||
else:
|
||||
return super().parse_arg(argname, displayname, limited_capi=limited_capi)
|
||||
return self.format_code("""
|
||||
{paramname} = PyObject_AsFileDescriptor({argname});
|
||||
if ({paramname} < 0) {{{{
|
||||
goto exit;
|
||||
}}}}
|
||||
""",
|
||||
argname=argname)
|
||||
|
||||
|
||||
class float_converter(CConverter):
|
||||
|
|
Loading…
Reference in New Issue