They conflicted with keyword "in".
Also rename positional-only parameters of private os._fcopyfile()
for consistency.
: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*
.. versionadded:: 3.3
+ .. versionchanged:: 3.9
+ Parameters *out* and *in* was renamed to *out_fd* and *in_fd*.
+
.. function:: set_blocking(fd, blocking)
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
--- /dev/null
+Parameters *out* and *in* of :func:`os.sendfile` was renamed to *out_fd* and
+*in_fd*.
#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).");
{"_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)) {
"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])) {
"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])) {
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;
#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]*/
#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 *
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};
#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))
/*[clinic input]
os._fcopyfile
- infd: int
- outfd: int
+ in_fd: int
+ out_fd: int
flags: int
/
[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();