17db96d56Sopenharmony_ci/*[clinic input]
27db96d56Sopenharmony_cipreserve
37db96d56Sopenharmony_ci[clinic start generated code]*/
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciPyDoc_STRVAR(_io_FileIO_close__doc__,
67db96d56Sopenharmony_ci"close($self, /)\n"
77db96d56Sopenharmony_ci"--\n"
87db96d56Sopenharmony_ci"\n"
97db96d56Sopenharmony_ci"Close the file.\n"
107db96d56Sopenharmony_ci"\n"
117db96d56Sopenharmony_ci"A closed file cannot be used for further I/O operations.  close() may be\n"
127db96d56Sopenharmony_ci"called more than once without error.");
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ci#define _IO_FILEIO_CLOSE_METHODDEF    \
157db96d56Sopenharmony_ci    {"close", (PyCFunction)_io_FileIO_close, METH_NOARGS, _io_FileIO_close__doc__},
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_cistatic PyObject *
187db96d56Sopenharmony_ci_io_FileIO_close_impl(fileio *self);
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_cistatic PyObject *
217db96d56Sopenharmony_ci_io_FileIO_close(fileio *self, PyObject *Py_UNUSED(ignored))
227db96d56Sopenharmony_ci{
237db96d56Sopenharmony_ci    return _io_FileIO_close_impl(self);
247db96d56Sopenharmony_ci}
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ciPyDoc_STRVAR(_io_FileIO___init____doc__,
277db96d56Sopenharmony_ci"FileIO(file, mode=\'r\', closefd=True, opener=None)\n"
287db96d56Sopenharmony_ci"--\n"
297db96d56Sopenharmony_ci"\n"
307db96d56Sopenharmony_ci"Open a file.\n"
317db96d56Sopenharmony_ci"\n"
327db96d56Sopenharmony_ci"The mode can be \'r\' (default), \'w\', \'x\' or \'a\' for reading,\n"
337db96d56Sopenharmony_ci"writing, exclusive creation or appending.  The file will be created if it\n"
347db96d56Sopenharmony_ci"doesn\'t exist when opened for writing or appending; it will be truncated\n"
357db96d56Sopenharmony_ci"when opened for writing.  A FileExistsError will be raised if it already\n"
367db96d56Sopenharmony_ci"exists when opened for creating. Opening a file for creating implies\n"
377db96d56Sopenharmony_ci"writing so this mode behaves in a similar way to \'w\'.Add a \'+\' to the mode\n"
387db96d56Sopenharmony_ci"to allow simultaneous reading and writing. A custom opener can be used by\n"
397db96d56Sopenharmony_ci"passing a callable as *opener*. The underlying file descriptor for the file\n"
407db96d56Sopenharmony_ci"object is then obtained by calling opener with (*name*, *flags*).\n"
417db96d56Sopenharmony_ci"*opener* must return an open file descriptor (passing os.open as *opener*\n"
427db96d56Sopenharmony_ci"results in functionality similar to passing None).");
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_cistatic int
457db96d56Sopenharmony_ci_io_FileIO___init___impl(fileio *self, PyObject *nameobj, const char *mode,
467db96d56Sopenharmony_ci                         int closefd, PyObject *opener);
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_cistatic int
497db96d56Sopenharmony_ci_io_FileIO___init__(PyObject *self, PyObject *args, PyObject *kwargs)
507db96d56Sopenharmony_ci{
517db96d56Sopenharmony_ci    int return_value = -1;
527db96d56Sopenharmony_ci    static const char * const _keywords[] = {"file", "mode", "closefd", "opener", NULL};
537db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "FileIO", 0};
547db96d56Sopenharmony_ci    PyObject *argsbuf[4];
557db96d56Sopenharmony_ci    PyObject * const *fastargs;
567db96d56Sopenharmony_ci    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
577db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1;
587db96d56Sopenharmony_ci    PyObject *nameobj;
597db96d56Sopenharmony_ci    const char *mode = "r";
607db96d56Sopenharmony_ci    int closefd = 1;
617db96d56Sopenharmony_ci    PyObject *opener = Py_None;
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ci    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 1, 4, 0, argsbuf);
647db96d56Sopenharmony_ci    if (!fastargs) {
657db96d56Sopenharmony_ci        goto exit;
667db96d56Sopenharmony_ci    }
677db96d56Sopenharmony_ci    nameobj = fastargs[0];
687db96d56Sopenharmony_ci    if (!noptargs) {
697db96d56Sopenharmony_ci        goto skip_optional_pos;
707db96d56Sopenharmony_ci    }
717db96d56Sopenharmony_ci    if (fastargs[1]) {
727db96d56Sopenharmony_ci        if (!PyUnicode_Check(fastargs[1])) {
737db96d56Sopenharmony_ci            _PyArg_BadArgument("FileIO", "argument 'mode'", "str", fastargs[1]);
747db96d56Sopenharmony_ci            goto exit;
757db96d56Sopenharmony_ci        }
767db96d56Sopenharmony_ci        Py_ssize_t mode_length;
777db96d56Sopenharmony_ci        mode = PyUnicode_AsUTF8AndSize(fastargs[1], &mode_length);
787db96d56Sopenharmony_ci        if (mode == NULL) {
797db96d56Sopenharmony_ci            goto exit;
807db96d56Sopenharmony_ci        }
817db96d56Sopenharmony_ci        if (strlen(mode) != (size_t)mode_length) {
827db96d56Sopenharmony_ci            PyErr_SetString(PyExc_ValueError, "embedded null character");
837db96d56Sopenharmony_ci            goto exit;
847db96d56Sopenharmony_ci        }
857db96d56Sopenharmony_ci        if (!--noptargs) {
867db96d56Sopenharmony_ci            goto skip_optional_pos;
877db96d56Sopenharmony_ci        }
887db96d56Sopenharmony_ci    }
897db96d56Sopenharmony_ci    if (fastargs[2]) {
907db96d56Sopenharmony_ci        closefd = _PyLong_AsInt(fastargs[2]);
917db96d56Sopenharmony_ci        if (closefd == -1 && PyErr_Occurred()) {
927db96d56Sopenharmony_ci            goto exit;
937db96d56Sopenharmony_ci        }
947db96d56Sopenharmony_ci        if (!--noptargs) {
957db96d56Sopenharmony_ci            goto skip_optional_pos;
967db96d56Sopenharmony_ci        }
977db96d56Sopenharmony_ci    }
987db96d56Sopenharmony_ci    opener = fastargs[3];
997db96d56Sopenharmony_ciskip_optional_pos:
1007db96d56Sopenharmony_ci    return_value = _io_FileIO___init___impl((fileio *)self, nameobj, mode, closefd, opener);
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_ciexit:
1037db96d56Sopenharmony_ci    return return_value;
1047db96d56Sopenharmony_ci}
1057db96d56Sopenharmony_ci
1067db96d56Sopenharmony_ciPyDoc_STRVAR(_io_FileIO_fileno__doc__,
1077db96d56Sopenharmony_ci"fileno($self, /)\n"
1087db96d56Sopenharmony_ci"--\n"
1097db96d56Sopenharmony_ci"\n"
1107db96d56Sopenharmony_ci"Return the underlying file descriptor (an integer).");
1117db96d56Sopenharmony_ci
1127db96d56Sopenharmony_ci#define _IO_FILEIO_FILENO_METHODDEF    \
1137db96d56Sopenharmony_ci    {"fileno", (PyCFunction)_io_FileIO_fileno, METH_NOARGS, _io_FileIO_fileno__doc__},
1147db96d56Sopenharmony_ci
1157db96d56Sopenharmony_cistatic PyObject *
1167db96d56Sopenharmony_ci_io_FileIO_fileno_impl(fileio *self);
1177db96d56Sopenharmony_ci
1187db96d56Sopenharmony_cistatic PyObject *
1197db96d56Sopenharmony_ci_io_FileIO_fileno(fileio *self, PyObject *Py_UNUSED(ignored))
1207db96d56Sopenharmony_ci{
1217db96d56Sopenharmony_ci    return _io_FileIO_fileno_impl(self);
1227db96d56Sopenharmony_ci}
1237db96d56Sopenharmony_ci
1247db96d56Sopenharmony_ciPyDoc_STRVAR(_io_FileIO_readable__doc__,
1257db96d56Sopenharmony_ci"readable($self, /)\n"
1267db96d56Sopenharmony_ci"--\n"
1277db96d56Sopenharmony_ci"\n"
1287db96d56Sopenharmony_ci"True if file was opened in a read mode.");
1297db96d56Sopenharmony_ci
1307db96d56Sopenharmony_ci#define _IO_FILEIO_READABLE_METHODDEF    \
1317db96d56Sopenharmony_ci    {"readable", (PyCFunction)_io_FileIO_readable, METH_NOARGS, _io_FileIO_readable__doc__},
1327db96d56Sopenharmony_ci
1337db96d56Sopenharmony_cistatic PyObject *
1347db96d56Sopenharmony_ci_io_FileIO_readable_impl(fileio *self);
1357db96d56Sopenharmony_ci
1367db96d56Sopenharmony_cistatic PyObject *
1377db96d56Sopenharmony_ci_io_FileIO_readable(fileio *self, PyObject *Py_UNUSED(ignored))
1387db96d56Sopenharmony_ci{
1397db96d56Sopenharmony_ci    return _io_FileIO_readable_impl(self);
1407db96d56Sopenharmony_ci}
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ciPyDoc_STRVAR(_io_FileIO_writable__doc__,
1437db96d56Sopenharmony_ci"writable($self, /)\n"
1447db96d56Sopenharmony_ci"--\n"
1457db96d56Sopenharmony_ci"\n"
1467db96d56Sopenharmony_ci"True if file was opened in a write mode.");
1477db96d56Sopenharmony_ci
1487db96d56Sopenharmony_ci#define _IO_FILEIO_WRITABLE_METHODDEF    \
1497db96d56Sopenharmony_ci    {"writable", (PyCFunction)_io_FileIO_writable, METH_NOARGS, _io_FileIO_writable__doc__},
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_cistatic PyObject *
1527db96d56Sopenharmony_ci_io_FileIO_writable_impl(fileio *self);
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_cistatic PyObject *
1557db96d56Sopenharmony_ci_io_FileIO_writable(fileio *self, PyObject *Py_UNUSED(ignored))
1567db96d56Sopenharmony_ci{
1577db96d56Sopenharmony_ci    return _io_FileIO_writable_impl(self);
1587db96d56Sopenharmony_ci}
1597db96d56Sopenharmony_ci
1607db96d56Sopenharmony_ciPyDoc_STRVAR(_io_FileIO_seekable__doc__,
1617db96d56Sopenharmony_ci"seekable($self, /)\n"
1627db96d56Sopenharmony_ci"--\n"
1637db96d56Sopenharmony_ci"\n"
1647db96d56Sopenharmony_ci"True if file supports random-access.");
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ci#define _IO_FILEIO_SEEKABLE_METHODDEF    \
1677db96d56Sopenharmony_ci    {"seekable", (PyCFunction)_io_FileIO_seekable, METH_NOARGS, _io_FileIO_seekable__doc__},
1687db96d56Sopenharmony_ci
1697db96d56Sopenharmony_cistatic PyObject *
1707db96d56Sopenharmony_ci_io_FileIO_seekable_impl(fileio *self);
1717db96d56Sopenharmony_ci
1727db96d56Sopenharmony_cistatic PyObject *
1737db96d56Sopenharmony_ci_io_FileIO_seekable(fileio *self, PyObject *Py_UNUSED(ignored))
1747db96d56Sopenharmony_ci{
1757db96d56Sopenharmony_ci    return _io_FileIO_seekable_impl(self);
1767db96d56Sopenharmony_ci}
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_ciPyDoc_STRVAR(_io_FileIO_readinto__doc__,
1797db96d56Sopenharmony_ci"readinto($self, buffer, /)\n"
1807db96d56Sopenharmony_ci"--\n"
1817db96d56Sopenharmony_ci"\n"
1827db96d56Sopenharmony_ci"Same as RawIOBase.readinto().");
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ci#define _IO_FILEIO_READINTO_METHODDEF    \
1857db96d56Sopenharmony_ci    {"readinto", (PyCFunction)_io_FileIO_readinto, METH_O, _io_FileIO_readinto__doc__},
1867db96d56Sopenharmony_ci
1877db96d56Sopenharmony_cistatic PyObject *
1887db96d56Sopenharmony_ci_io_FileIO_readinto_impl(fileio *self, Py_buffer *buffer);
1897db96d56Sopenharmony_ci
1907db96d56Sopenharmony_cistatic PyObject *
1917db96d56Sopenharmony_ci_io_FileIO_readinto(fileio *self, PyObject *arg)
1927db96d56Sopenharmony_ci{
1937db96d56Sopenharmony_ci    PyObject *return_value = NULL;
1947db96d56Sopenharmony_ci    Py_buffer buffer = {NULL, NULL};
1957db96d56Sopenharmony_ci
1967db96d56Sopenharmony_ci    if (PyObject_GetBuffer(arg, &buffer, PyBUF_WRITABLE) < 0) {
1977db96d56Sopenharmony_ci        PyErr_Clear();
1987db96d56Sopenharmony_ci        _PyArg_BadArgument("readinto", "argument", "read-write bytes-like object", arg);
1997db96d56Sopenharmony_ci        goto exit;
2007db96d56Sopenharmony_ci    }
2017db96d56Sopenharmony_ci    if (!PyBuffer_IsContiguous(&buffer, 'C')) {
2027db96d56Sopenharmony_ci        _PyArg_BadArgument("readinto", "argument", "contiguous buffer", arg);
2037db96d56Sopenharmony_ci        goto exit;
2047db96d56Sopenharmony_ci    }
2057db96d56Sopenharmony_ci    return_value = _io_FileIO_readinto_impl(self, &buffer);
2067db96d56Sopenharmony_ci
2077db96d56Sopenharmony_ciexit:
2087db96d56Sopenharmony_ci    /* Cleanup for buffer */
2097db96d56Sopenharmony_ci    if (buffer.obj) {
2107db96d56Sopenharmony_ci       PyBuffer_Release(&buffer);
2117db96d56Sopenharmony_ci    }
2127db96d56Sopenharmony_ci
2137db96d56Sopenharmony_ci    return return_value;
2147db96d56Sopenharmony_ci}
2157db96d56Sopenharmony_ci
2167db96d56Sopenharmony_ciPyDoc_STRVAR(_io_FileIO_readall__doc__,
2177db96d56Sopenharmony_ci"readall($self, /)\n"
2187db96d56Sopenharmony_ci"--\n"
2197db96d56Sopenharmony_ci"\n"
2207db96d56Sopenharmony_ci"Read all data from the file, returned as bytes.\n"
2217db96d56Sopenharmony_ci"\n"
2227db96d56Sopenharmony_ci"In non-blocking mode, returns as much as is immediately available,\n"
2237db96d56Sopenharmony_ci"or None if no data is available.  Return an empty bytes object at EOF.");
2247db96d56Sopenharmony_ci
2257db96d56Sopenharmony_ci#define _IO_FILEIO_READALL_METHODDEF    \
2267db96d56Sopenharmony_ci    {"readall", (PyCFunction)_io_FileIO_readall, METH_NOARGS, _io_FileIO_readall__doc__},
2277db96d56Sopenharmony_ci
2287db96d56Sopenharmony_cistatic PyObject *
2297db96d56Sopenharmony_ci_io_FileIO_readall_impl(fileio *self);
2307db96d56Sopenharmony_ci
2317db96d56Sopenharmony_cistatic PyObject *
2327db96d56Sopenharmony_ci_io_FileIO_readall(fileio *self, PyObject *Py_UNUSED(ignored))
2337db96d56Sopenharmony_ci{
2347db96d56Sopenharmony_ci    return _io_FileIO_readall_impl(self);
2357db96d56Sopenharmony_ci}
2367db96d56Sopenharmony_ci
2377db96d56Sopenharmony_ciPyDoc_STRVAR(_io_FileIO_read__doc__,
2387db96d56Sopenharmony_ci"read($self, size=-1, /)\n"
2397db96d56Sopenharmony_ci"--\n"
2407db96d56Sopenharmony_ci"\n"
2417db96d56Sopenharmony_ci"Read at most size bytes, returned as bytes.\n"
2427db96d56Sopenharmony_ci"\n"
2437db96d56Sopenharmony_ci"Only makes one system call, so less data may be returned than requested.\n"
2447db96d56Sopenharmony_ci"In non-blocking mode, returns None if no data is available.\n"
2457db96d56Sopenharmony_ci"Return an empty bytes object at EOF.");
2467db96d56Sopenharmony_ci
2477db96d56Sopenharmony_ci#define _IO_FILEIO_READ_METHODDEF    \
2487db96d56Sopenharmony_ci    {"read", _PyCFunction_CAST(_io_FileIO_read), METH_FASTCALL, _io_FileIO_read__doc__},
2497db96d56Sopenharmony_ci
2507db96d56Sopenharmony_cistatic PyObject *
2517db96d56Sopenharmony_ci_io_FileIO_read_impl(fileio *self, Py_ssize_t size);
2527db96d56Sopenharmony_ci
2537db96d56Sopenharmony_cistatic PyObject *
2547db96d56Sopenharmony_ci_io_FileIO_read(fileio *self, PyObject *const *args, Py_ssize_t nargs)
2557db96d56Sopenharmony_ci{
2567db96d56Sopenharmony_ci    PyObject *return_value = NULL;
2577db96d56Sopenharmony_ci    Py_ssize_t size = -1;
2587db96d56Sopenharmony_ci
2597db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("read", nargs, 0, 1)) {
2607db96d56Sopenharmony_ci        goto exit;
2617db96d56Sopenharmony_ci    }
2627db96d56Sopenharmony_ci    if (nargs < 1) {
2637db96d56Sopenharmony_ci        goto skip_optional;
2647db96d56Sopenharmony_ci    }
2657db96d56Sopenharmony_ci    if (!_Py_convert_optional_to_ssize_t(args[0], &size)) {
2667db96d56Sopenharmony_ci        goto exit;
2677db96d56Sopenharmony_ci    }
2687db96d56Sopenharmony_ciskip_optional:
2697db96d56Sopenharmony_ci    return_value = _io_FileIO_read_impl(self, size);
2707db96d56Sopenharmony_ci
2717db96d56Sopenharmony_ciexit:
2727db96d56Sopenharmony_ci    return return_value;
2737db96d56Sopenharmony_ci}
2747db96d56Sopenharmony_ci
2757db96d56Sopenharmony_ciPyDoc_STRVAR(_io_FileIO_write__doc__,
2767db96d56Sopenharmony_ci"write($self, b, /)\n"
2777db96d56Sopenharmony_ci"--\n"
2787db96d56Sopenharmony_ci"\n"
2797db96d56Sopenharmony_ci"Write buffer b to file, return number of bytes written.\n"
2807db96d56Sopenharmony_ci"\n"
2817db96d56Sopenharmony_ci"Only makes one system call, so not all of the data may be written.\n"
2827db96d56Sopenharmony_ci"The number of bytes actually written is returned.  In non-blocking mode,\n"
2837db96d56Sopenharmony_ci"returns None if the write would block.");
2847db96d56Sopenharmony_ci
2857db96d56Sopenharmony_ci#define _IO_FILEIO_WRITE_METHODDEF    \
2867db96d56Sopenharmony_ci    {"write", (PyCFunction)_io_FileIO_write, METH_O, _io_FileIO_write__doc__},
2877db96d56Sopenharmony_ci
2887db96d56Sopenharmony_cistatic PyObject *
2897db96d56Sopenharmony_ci_io_FileIO_write_impl(fileio *self, Py_buffer *b);
2907db96d56Sopenharmony_ci
2917db96d56Sopenharmony_cistatic PyObject *
2927db96d56Sopenharmony_ci_io_FileIO_write(fileio *self, PyObject *arg)
2937db96d56Sopenharmony_ci{
2947db96d56Sopenharmony_ci    PyObject *return_value = NULL;
2957db96d56Sopenharmony_ci    Py_buffer b = {NULL, NULL};
2967db96d56Sopenharmony_ci
2977db96d56Sopenharmony_ci    if (PyObject_GetBuffer(arg, &b, PyBUF_SIMPLE) != 0) {
2987db96d56Sopenharmony_ci        goto exit;
2997db96d56Sopenharmony_ci    }
3007db96d56Sopenharmony_ci    if (!PyBuffer_IsContiguous(&b, 'C')) {
3017db96d56Sopenharmony_ci        _PyArg_BadArgument("write", "argument", "contiguous buffer", arg);
3027db96d56Sopenharmony_ci        goto exit;
3037db96d56Sopenharmony_ci    }
3047db96d56Sopenharmony_ci    return_value = _io_FileIO_write_impl(self, &b);
3057db96d56Sopenharmony_ci
3067db96d56Sopenharmony_ciexit:
3077db96d56Sopenharmony_ci    /* Cleanup for b */
3087db96d56Sopenharmony_ci    if (b.obj) {
3097db96d56Sopenharmony_ci       PyBuffer_Release(&b);
3107db96d56Sopenharmony_ci    }
3117db96d56Sopenharmony_ci
3127db96d56Sopenharmony_ci    return return_value;
3137db96d56Sopenharmony_ci}
3147db96d56Sopenharmony_ci
3157db96d56Sopenharmony_ciPyDoc_STRVAR(_io_FileIO_seek__doc__,
3167db96d56Sopenharmony_ci"seek($self, pos, whence=0, /)\n"
3177db96d56Sopenharmony_ci"--\n"
3187db96d56Sopenharmony_ci"\n"
3197db96d56Sopenharmony_ci"Move to new file position and return the file position.\n"
3207db96d56Sopenharmony_ci"\n"
3217db96d56Sopenharmony_ci"Argument offset is a byte count.  Optional argument whence defaults to\n"
3227db96d56Sopenharmony_ci"SEEK_SET or 0 (offset from start of file, offset should be >= 0); other values\n"
3237db96d56Sopenharmony_ci"are SEEK_CUR or 1 (move relative to current position, positive or negative),\n"
3247db96d56Sopenharmony_ci"and SEEK_END or 2 (move relative to end of file, usually negative, although\n"
3257db96d56Sopenharmony_ci"many platforms allow seeking beyond the end of a file).\n"
3267db96d56Sopenharmony_ci"\n"
3277db96d56Sopenharmony_ci"Note that not all file objects are seekable.");
3287db96d56Sopenharmony_ci
3297db96d56Sopenharmony_ci#define _IO_FILEIO_SEEK_METHODDEF    \
3307db96d56Sopenharmony_ci    {"seek", _PyCFunction_CAST(_io_FileIO_seek), METH_FASTCALL, _io_FileIO_seek__doc__},
3317db96d56Sopenharmony_ci
3327db96d56Sopenharmony_cistatic PyObject *
3337db96d56Sopenharmony_ci_io_FileIO_seek_impl(fileio *self, PyObject *pos, int whence);
3347db96d56Sopenharmony_ci
3357db96d56Sopenharmony_cistatic PyObject *
3367db96d56Sopenharmony_ci_io_FileIO_seek(fileio *self, PyObject *const *args, Py_ssize_t nargs)
3377db96d56Sopenharmony_ci{
3387db96d56Sopenharmony_ci    PyObject *return_value = NULL;
3397db96d56Sopenharmony_ci    PyObject *pos;
3407db96d56Sopenharmony_ci    int whence = 0;
3417db96d56Sopenharmony_ci
3427db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("seek", nargs, 1, 2)) {
3437db96d56Sopenharmony_ci        goto exit;
3447db96d56Sopenharmony_ci    }
3457db96d56Sopenharmony_ci    pos = args[0];
3467db96d56Sopenharmony_ci    if (nargs < 2) {
3477db96d56Sopenharmony_ci        goto skip_optional;
3487db96d56Sopenharmony_ci    }
3497db96d56Sopenharmony_ci    whence = _PyLong_AsInt(args[1]);
3507db96d56Sopenharmony_ci    if (whence == -1 && PyErr_Occurred()) {
3517db96d56Sopenharmony_ci        goto exit;
3527db96d56Sopenharmony_ci    }
3537db96d56Sopenharmony_ciskip_optional:
3547db96d56Sopenharmony_ci    return_value = _io_FileIO_seek_impl(self, pos, whence);
3557db96d56Sopenharmony_ci
3567db96d56Sopenharmony_ciexit:
3577db96d56Sopenharmony_ci    return return_value;
3587db96d56Sopenharmony_ci}
3597db96d56Sopenharmony_ci
3607db96d56Sopenharmony_ciPyDoc_STRVAR(_io_FileIO_tell__doc__,
3617db96d56Sopenharmony_ci"tell($self, /)\n"
3627db96d56Sopenharmony_ci"--\n"
3637db96d56Sopenharmony_ci"\n"
3647db96d56Sopenharmony_ci"Current file position.\n"
3657db96d56Sopenharmony_ci"\n"
3667db96d56Sopenharmony_ci"Can raise OSError for non seekable files.");
3677db96d56Sopenharmony_ci
3687db96d56Sopenharmony_ci#define _IO_FILEIO_TELL_METHODDEF    \
3697db96d56Sopenharmony_ci    {"tell", (PyCFunction)_io_FileIO_tell, METH_NOARGS, _io_FileIO_tell__doc__},
3707db96d56Sopenharmony_ci
3717db96d56Sopenharmony_cistatic PyObject *
3727db96d56Sopenharmony_ci_io_FileIO_tell_impl(fileio *self);
3737db96d56Sopenharmony_ci
3747db96d56Sopenharmony_cistatic PyObject *
3757db96d56Sopenharmony_ci_io_FileIO_tell(fileio *self, PyObject *Py_UNUSED(ignored))
3767db96d56Sopenharmony_ci{
3777db96d56Sopenharmony_ci    return _io_FileIO_tell_impl(self);
3787db96d56Sopenharmony_ci}
3797db96d56Sopenharmony_ci
3807db96d56Sopenharmony_ci#if defined(HAVE_FTRUNCATE)
3817db96d56Sopenharmony_ci
3827db96d56Sopenharmony_ciPyDoc_STRVAR(_io_FileIO_truncate__doc__,
3837db96d56Sopenharmony_ci"truncate($self, size=None, /)\n"
3847db96d56Sopenharmony_ci"--\n"
3857db96d56Sopenharmony_ci"\n"
3867db96d56Sopenharmony_ci"Truncate the file to at most size bytes and return the truncated size.\n"
3877db96d56Sopenharmony_ci"\n"
3887db96d56Sopenharmony_ci"Size defaults to the current file position, as returned by tell().\n"
3897db96d56Sopenharmony_ci"The current file position is changed to the value of size.");
3907db96d56Sopenharmony_ci
3917db96d56Sopenharmony_ci#define _IO_FILEIO_TRUNCATE_METHODDEF    \
3927db96d56Sopenharmony_ci    {"truncate", _PyCFunction_CAST(_io_FileIO_truncate), METH_FASTCALL, _io_FileIO_truncate__doc__},
3937db96d56Sopenharmony_ci
3947db96d56Sopenharmony_cistatic PyObject *
3957db96d56Sopenharmony_ci_io_FileIO_truncate_impl(fileio *self, PyObject *posobj);
3967db96d56Sopenharmony_ci
3977db96d56Sopenharmony_cistatic PyObject *
3987db96d56Sopenharmony_ci_io_FileIO_truncate(fileio *self, PyObject *const *args, Py_ssize_t nargs)
3997db96d56Sopenharmony_ci{
4007db96d56Sopenharmony_ci    PyObject *return_value = NULL;
4017db96d56Sopenharmony_ci    PyObject *posobj = Py_None;
4027db96d56Sopenharmony_ci
4037db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("truncate", nargs, 0, 1)) {
4047db96d56Sopenharmony_ci        goto exit;
4057db96d56Sopenharmony_ci    }
4067db96d56Sopenharmony_ci    if (nargs < 1) {
4077db96d56Sopenharmony_ci        goto skip_optional;
4087db96d56Sopenharmony_ci    }
4097db96d56Sopenharmony_ci    posobj = args[0];
4107db96d56Sopenharmony_ciskip_optional:
4117db96d56Sopenharmony_ci    return_value = _io_FileIO_truncate_impl(self, posobj);
4127db96d56Sopenharmony_ci
4137db96d56Sopenharmony_ciexit:
4147db96d56Sopenharmony_ci    return return_value;
4157db96d56Sopenharmony_ci}
4167db96d56Sopenharmony_ci
4177db96d56Sopenharmony_ci#endif /* defined(HAVE_FTRUNCATE) */
4187db96d56Sopenharmony_ci
4197db96d56Sopenharmony_ciPyDoc_STRVAR(_io_FileIO_isatty__doc__,
4207db96d56Sopenharmony_ci"isatty($self, /)\n"
4217db96d56Sopenharmony_ci"--\n"
4227db96d56Sopenharmony_ci"\n"
4237db96d56Sopenharmony_ci"True if the file is connected to a TTY device.");
4247db96d56Sopenharmony_ci
4257db96d56Sopenharmony_ci#define _IO_FILEIO_ISATTY_METHODDEF    \
4267db96d56Sopenharmony_ci    {"isatty", (PyCFunction)_io_FileIO_isatty, METH_NOARGS, _io_FileIO_isatty__doc__},
4277db96d56Sopenharmony_ci
4287db96d56Sopenharmony_cistatic PyObject *
4297db96d56Sopenharmony_ci_io_FileIO_isatty_impl(fileio *self);
4307db96d56Sopenharmony_ci
4317db96d56Sopenharmony_cistatic PyObject *
4327db96d56Sopenharmony_ci_io_FileIO_isatty(fileio *self, PyObject *Py_UNUSED(ignored))
4337db96d56Sopenharmony_ci{
4347db96d56Sopenharmony_ci    return _io_FileIO_isatty_impl(self);
4357db96d56Sopenharmony_ci}
4367db96d56Sopenharmony_ci
4377db96d56Sopenharmony_ci#ifndef _IO_FILEIO_TRUNCATE_METHODDEF
4387db96d56Sopenharmony_ci    #define _IO_FILEIO_TRUNCATE_METHODDEF
4397db96d56Sopenharmony_ci#endif /* !defined(_IO_FILEIO_TRUNCATE_METHODDEF) */
4407db96d56Sopenharmony_ci/*[clinic end generated code: output=fdcf0f9277d44415 input=a9049054013a1b77]*/
441