From 140a7d1f3579e778656a6b6bfad72489e9870a4d Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 13 Oct 2019 11:59:31 +0300 Subject: bpo-38378: Rename parameters "out" and "in" of os.sendfile(). (GH-16742) They conflicted with keyword "in". Also rename positional-only parameters of private os._fcopyfile() for consistency. --- Doc/library/os.rst | 21 ++++++++++++--------- Lib/test/test_os.py | 9 +++++---- .../2019-10-13-11-00-03.bpo-38378.yYNpSm.rst | 2 ++ Modules/clinic/posixmodule.c.h | 20 ++++++++++---------- Modules/posixmodule.c | 21 ++++++++++----------- 5 files changed, 39 insertions(+), 34 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2019-10-13-11-00-03.bpo-38378.yYNpSm.rst diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 67fe36b..fe9531b 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -1251,27 +1251,27 @@ or `the MSDN `_ on Windo :exc:`InterruptedError` exception (see :pep:`475` for the rationale). -.. function:: sendfile(out, in, offset, count) - sendfile(out, in, offset, count, [headers], [trailers], flags=0) +.. function:: sendfile(out_fd, in_fd, offset, count) + sendfile(out_fd, in_fd, offset, count, [headers], [trailers], flags=0) - Copy *count* bytes from file descriptor *in* to file descriptor *out* + Copy *count* bytes from file descriptor *in_fd* to file descriptor *out_fd* starting at *offset*. - Return the number of bytes sent. When EOF is reached return 0. + Return the number of bytes sent. When EOF is reached return ``0``. The first function notation is supported by all platforms that define :func:`sendfile`. On Linux, if *offset* is given as ``None``, the bytes are read from the - current position of *in* and the position of *in* is updated. + current position of *in_fd* and the position of *in_fd* is updated. The second case may be used on Mac OS X and FreeBSD where *headers* and *trailers* are arbitrary sequences of buffers that are written before and - after the data from *in* is written. It returns the same as the first case. + after the data from *in_fd* is written. It returns the same as the first case. - On Mac OS X and FreeBSD, a value of 0 for *count* specifies to send until - the end of *in* is reached. + On Mac OS X and FreeBSD, a value of ``0`` for *count* specifies to send until + the end of *in_fd* is reached. - All platforms support sockets as *out* file descriptor, and some platforms + All platforms support sockets as *out_fd* file descriptor, and some platforms allow other types (e.g. regular file, pipe) as well. Cross-platform applications should not use *headers*, *trailers* and *flags* @@ -1286,6 +1286,9 @@ or `the MSDN `_ on Windo .. versionadded:: 3.3 + .. versionchanged:: 3.9 + Parameters *out* and *in* was renamed to *out_fd* and *in_fd*. + .. function:: set_blocking(fd, blocking) diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index 4a076e3..d2bd9c2 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -3110,11 +3110,12 @@ class TestSendfile(unittest.TestCase): def test_keywords(self): # Keyword arguments should be supported - os.sendfile(out=self.sockno, offset=0, count=4096, - **{'in': self.fileno}) + os.sendfile(out_fd=self.sockno, in_fd=self.fileno, + offset=0, count=4096) if self.SUPPORT_HEADERS_TRAILERS: - os.sendfile(self.sockno, self.fileno, offset=0, count=4096, - headers=(), trailers=(), flags=0) + os.sendfile(out_fd=self.sockno, in_fd=self.fileno, + offset=0, count=4096, + headers=(), trailers=(), flags=0) # --- headers / trailers tests diff --git a/Misc/NEWS.d/next/Library/2019-10-13-11-00-03.bpo-38378.yYNpSm.rst b/Misc/NEWS.d/next/Library/2019-10-13-11-00-03.bpo-38378.yYNpSm.rst new file mode 100644 index 0000000..1bc5282 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-10-13-11-00-03.bpo-38378.yYNpSm.rst @@ -0,0 +1,2 @@ +Parameters *out* and *in* of :func:`os.sendfile` was renamed to *out_fd* and +*in_fd*. diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index 00b05f7..561cbb0 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -4986,7 +4986,7 @@ exit: #if defined(__APPLE__) PyDoc_STRVAR(os__fcopyfile__doc__, -"_fcopyfile($module, infd, outfd, flags, /)\n" +"_fcopyfile($module, in_fd, out_fd, flags, /)\n" "--\n" "\n" "Efficiently copy content or metadata of 2 regular file descriptors (macOS)."); @@ -4995,14 +4995,14 @@ PyDoc_STRVAR(os__fcopyfile__doc__, {"_fcopyfile", (PyCFunction)(void(*)(void))os__fcopyfile, METH_FASTCALL, os__fcopyfile__doc__}, static PyObject * -os__fcopyfile_impl(PyObject *module, int infd, int outfd, int flags); +os__fcopyfile_impl(PyObject *module, int in_fd, int out_fd, int flags); static PyObject * os__fcopyfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs) { PyObject *return_value = NULL; - int infd; - int outfd; + int in_fd; + int out_fd; int flags; if (!_PyArg_CheckPositional("_fcopyfile", nargs, 3, 3)) { @@ -5013,8 +5013,8 @@ os__fcopyfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs) "integer argument expected, got float" ); goto exit; } - infd = _PyLong_AsInt(args[0]); - if (infd == -1 && PyErr_Occurred()) { + in_fd = _PyLong_AsInt(args[0]); + if (in_fd == -1 && PyErr_Occurred()) { goto exit; } if (PyFloat_Check(args[1])) { @@ -5022,8 +5022,8 @@ os__fcopyfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs) "integer argument expected, got float" ); goto exit; } - outfd = _PyLong_AsInt(args[1]); - if (outfd == -1 && PyErr_Occurred()) { + out_fd = _PyLong_AsInt(args[1]); + if (out_fd == -1 && PyErr_Occurred()) { goto exit; } if (PyFloat_Check(args[2])) { @@ -5035,7 +5035,7 @@ os__fcopyfile(PyObject *module, PyObject *const *args, Py_ssize_t nargs) if (flags == -1 && PyErr_Occurred()) { goto exit; } - return_value = os__fcopyfile_impl(module, infd, outfd, flags); + return_value = os__fcopyfile_impl(module, in_fd, out_fd, flags); exit: return return_value; @@ -8731,4 +8731,4 @@ exit: #ifndef OS__REMOVE_DLL_DIRECTORY_METHODDEF #define OS__REMOVE_DLL_DIRECTORY_METHODDEF #endif /* !defined(OS__REMOVE_DLL_DIRECTORY_METHODDEF) */ -/*[clinic end generated code: output=799c75140d84ace5 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=fe7897441fed5402 input=a9049054013a1b77]*/ diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index aeb0e9d..3c4e254 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -8993,10 +8993,10 @@ os_write_impl(PyObject *module, int fd, Py_buffer *data) #ifdef HAVE_SENDFILE PyDoc_STRVAR(posix_sendfile__doc__, -"sendfile(out, in, offset, count) -> byteswritten\n\ -sendfile(out, in, offset, count[, headers][, trailers], flags=0)\n\ +"sendfile(out_fd, in_fd, offset, count) -> byteswritten\n\ +sendfile(out_fd, in_fd, offset, count[, headers][, trailers], flags=0)\n\ -> byteswritten\n\ -Copy count bytes from file descriptor in to file descriptor out."); +Copy count bytes from file descriptor in_fd to file descriptor out_fd."); /* AC 3.5: don't bother converting, has optional group*/ static PyObject * @@ -9016,8 +9016,7 @@ posix_sendfile(PyObject *self, PyObject *args, PyObject *kwdict) off_t sbytes; struct sf_hdtr sf; int flags = 0; - /* Beware that "in" clashes with Python's own "in" operator keyword */ - static char *keywords[] = {"out", "in", + static char *keywords[] = {"out_fd", "in_fd", "offset", "count", "headers", "trailers", "flags", NULL}; @@ -9133,7 +9132,7 @@ done: #else Py_ssize_t count; PyObject *offobj; - static char *keywords[] = {"out", "in", + static char *keywords[] = {"out_fd", "in_fd", "offset", "count", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwdict, "iiOn:sendfile", keywords, &out, &in, &offobj, &count)) @@ -9170,8 +9169,8 @@ done: /*[clinic input] os._fcopyfile - infd: int - outfd: int + in_fd: int + out_fd: int flags: int / @@ -9179,13 +9178,13 @@ Efficiently copy content or metadata of 2 regular file descriptors (macOS). [clinic start generated code]*/ static PyObject * -os__fcopyfile_impl(PyObject *module, int infd, int outfd, int flags) -/*[clinic end generated code: output=8e8885c721ec38e3 input=69e0770e600cb44f]*/ +os__fcopyfile_impl(PyObject *module, int in_fd, int out_fd, int flags) +/*[clinic end generated code: output=c9d1a35a992e401b input=1e34638a86948795]*/ { int ret; Py_BEGIN_ALLOW_THREADS - ret = fcopyfile(infd, outfd, NULL, flags); + ret = fcopyfile(in_fd, out_fd, NULL, flags); Py_END_ALLOW_THREADS if (ret < 0) return posix_error(); -- cgit v0.12