Coverage Report

Created: 2026-10-31 06:21

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/cpython/Modules/_io/clinic/fileio.c.h
Line
Count
Source
1
/*[clinic input]
2
preserve
3
[clinic start generated code]*/
4
5
#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
6
#  include "pycore_gc.h"          // PyGC_Head
7
#  include "pycore_runtime.h"     // _Py_ID()
8
#endif
9
#include "pycore_abstract.h"      // _Py_convert_optional_to_ssize_t()
10
#include "pycore_modsupport.h"    // _PyArg_UnpackKeywords()
11
#include "pycore_unicodeobject.h" // _PyUnicode_AsUTF8NoNUL()
12
13
PyDoc_STRVAR(_io_FileIO__dealloc_warn__doc__,
14
"_dealloc_warn($self, source, /)\n"
15
"--\n"
16
"\n");
17
18
#define _IO_FILEIO__DEALLOC_WARN_METHODDEF    \
19
    {"_dealloc_warn", (PyCFunction)_io_FileIO__dealloc_warn, METH_O, _io_FileIO__dealloc_warn__doc__},
20
21
static PyObject *
22
_io_FileIO__dealloc_warn_impl(fileio *self, PyObject *source);
23
24
static PyObject *
25
_io_FileIO__dealloc_warn(PyObject *self, PyObject *source)
26
0
{
27
0
    PyObject *return_value = NULL;
28
29
0
    return_value = _io_FileIO__dealloc_warn_impl((fileio *)self, source);
30
31
0
    return return_value;
32
0
}
33
34
PyDoc_STRVAR(_io_FileIO_close__doc__,
35
"close($self, /)\n"
36
"--\n"
37
"\n"
38
"Close the file.\n"
39
"\n"
40
"A closed file cannot be used for further I/O operations.  close()\n"
41
"may be called more than once without error.");
42
43
#define _IO_FILEIO_CLOSE_METHODDEF    \
44
    {"close", _PyCFunction_CAST(_io_FileIO_close), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io_FileIO_close__doc__},
45
46
static PyObject *
47
_io_FileIO_close_impl(fileio *self, PyTypeObject *cls);
48
49
static PyObject *
50
_io_FileIO_close(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
51
22.9k
{
52
22.9k
    if (nargs || (kwnames && PyTuple_GET_SIZE(kwnames))) {
53
0
        PyErr_SetString(PyExc_TypeError, "close() takes no arguments");
54
0
        return NULL;
55
0
    }
56
22.9k
    return _io_FileIO_close_impl((fileio *)self, cls);
57
22.9k
}
58
59
PyDoc_STRVAR(_io_FileIO___init____doc__,
60
"FileIO(file, mode=\'r\', closefd=True, opener=None)\n"
61
"--\n"
62
"\n"
63
"Open a file.\n"
64
"\n"
65
"The mode can be \'r\' (default), \'w\', \'x\' or \'a\' for reading,\n"
66
"writing, exclusive creation or appending.  The file will be created\n"
67
"if it doesn\'t exist when opened for writing or appending; it will be\n"
68
"truncated when opened for writing.  A FileExistsError will be raised\n"
69
"if it already exists when opened for creating.  Opening a file for\n"
70
"creating implies writing so this mode behaves in a similar way to\n"
71
"\'w\'.  Add a \'+\' to the mode to allow simultaneous reading and\n"
72
"writing.\n"
73
"\n"
74
"A custom opener can be used by passing a callable as *opener*.\n"
75
"The underlying file descriptor for the file object is then obtained\n"
76
"by calling opener with (*name*, *flags*).  *opener* must return\n"
77
"an open file descriptor (passing os.open as *opener* results in\n"
78
"functionality similar to passing None).");
79
80
static int
81
_io_FileIO___init___impl(fileio *self, PyObject *nameobj, const char *mode,
82
                         int closefd, PyObject *opener);
83
84
static int
85
_io_FileIO___init__(PyObject *self, PyObject *args, PyObject *kwargs)
86
23.0k
{
87
23.0k
    int return_value = -1;
88
23.0k
    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
89
90
23.0k
    #define NUM_KEYWORDS 4
91
23.0k
    static struct {
92
23.0k
        PyGC_Head _this_is_not_used;
93
23.0k
        PyObject_VAR_HEAD
94
23.0k
        Py_hash_t ob_hash;
95
23.0k
        PyObject *ob_item[NUM_KEYWORDS];
96
23.0k
    } _kwtuple = {
97
23.0k
        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
98
23.0k
        .ob_hash = -1,
99
23.0k
        .ob_item = { &_Py_ID(file), &_Py_ID(mode), &_Py_ID(closefd), &_Py_ID(opener), },
100
23.0k
    };
101
23.0k
    #undef NUM_KEYWORDS
102
23.0k
    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
103
104
    #else  // !Py_BUILD_CORE
105
    #  define KWTUPLE NULL
106
    #endif  // !Py_BUILD_CORE
107
108
23.0k
    static const char * const _keywords[] = {"file", "mode", "closefd", "opener", NULL};
109
23.0k
    static _PyArg_Parser _parser = {
110
23.0k
        .keywords = _keywords,
111
23.0k
        .fname = "FileIO",
112
23.0k
        .kwtuple = KWTUPLE,
113
23.0k
    };
114
23.0k
    #undef KWTUPLE
115
23.0k
    PyObject *argsbuf[4];
116
23.0k
    PyObject * const *fastargs;
117
23.0k
    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
118
23.0k
    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1;
119
23.0k
    PyObject *nameobj;
120
23.0k
    const char *mode = "r";
121
23.0k
    int closefd = 1;
122
23.0k
    PyObject *opener = Py_None;
123
124
23.0k
    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser,
125
23.0k
            /*minpos*/ 1, /*maxpos*/ 4, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
126
23.0k
    if (!fastargs) {
127
0
        goto exit;
128
0
    }
129
23.0k
    nameobj = fastargs[0];
130
23.0k
    if (!noptargs) {
131
0
        goto skip_optional_pos;
132
0
    }
133
23.0k
    if (fastargs[1]) {
134
23.0k
        if (!PyUnicode_Check(fastargs[1])) {
135
0
            _PyArg_BadArgument("FileIO", "argument 'mode'", "str", fastargs[1]);
136
0
            goto exit;
137
0
        }
138
23.0k
        mode = _PyUnicode_AsUTF8NoNUL(fastargs[1]);
139
23.0k
        if (mode == NULL) {
140
0
            goto exit;
141
0
        }
142
23.0k
        if (!--noptargs) {
143
0
            goto skip_optional_pos;
144
0
        }
145
23.0k
    }
146
23.0k
    if (fastargs[2]) {
147
23.0k
        closefd = PyObject_IsTrue(fastargs[2]);
148
23.0k
        if (closefd < 0) {
149
0
            goto exit;
150
0
        }
151
23.0k
        if (!--noptargs) {
152
0
            goto skip_optional_pos;
153
0
        }
154
23.0k
    }
155
23.0k
    opener = fastargs[3];
156
23.0k
skip_optional_pos:
157
23.0k
    return_value = _io_FileIO___init___impl((fileio *)self, nameobj, mode, closefd, opener);
158
159
23.0k
exit:
160
23.0k
    return return_value;
161
23.0k
}
162
163
PyDoc_STRVAR(_io_FileIO_fileno__doc__,
164
"fileno($self, /)\n"
165
"--\n"
166
"\n"
167
"Return the underlying file descriptor (an integer).");
168
169
#define _IO_FILEIO_FILENO_METHODDEF    \
170
    {"fileno", (PyCFunction)_io_FileIO_fileno, METH_NOARGS, _io_FileIO_fileno__doc__},
171
172
static PyObject *
173
_io_FileIO_fileno_impl(fileio *self);
174
175
static PyObject *
176
_io_FileIO_fileno(PyObject *self, PyObject *Py_UNUSED(ignored))
177
0
{
178
0
    return _io_FileIO_fileno_impl((fileio *)self);
179
0
}
180
181
PyDoc_STRVAR(_io_FileIO_readable__doc__,
182
"readable($self, /)\n"
183
"--\n"
184
"\n"
185
"True if file was opened in a read mode.");
186
187
#define _IO_FILEIO_READABLE_METHODDEF    \
188
    {"readable", (PyCFunction)_io_FileIO_readable, METH_NOARGS, _io_FileIO_readable__doc__},
189
190
static PyObject *
191
_io_FileIO_readable_impl(fileio *self);
192
193
static PyObject *
194
_io_FileIO_readable(PyObject *self, PyObject *Py_UNUSED(ignored))
195
5.63k
{
196
5.63k
    return _io_FileIO_readable_impl((fileio *)self);
197
5.63k
}
198
199
PyDoc_STRVAR(_io_FileIO_writable__doc__,
200
"writable($self, /)\n"
201
"--\n"
202
"\n"
203
"True if file was opened in a write mode.");
204
205
#define _IO_FILEIO_WRITABLE_METHODDEF    \
206
    {"writable", (PyCFunction)_io_FileIO_writable, METH_NOARGS, _io_FileIO_writable__doc__},
207
208
static PyObject *
209
_io_FileIO_writable_impl(fileio *self);
210
211
static PyObject *
212
_io_FileIO_writable(PyObject *self, PyObject *Py_UNUSED(ignored))
213
17.5k
{
214
17.5k
    return _io_FileIO_writable_impl((fileio *)self);
215
17.5k
}
216
217
PyDoc_STRVAR(_io_FileIO_seekable__doc__,
218
"seekable($self, /)\n"
219
"--\n"
220
"\n"
221
"True if file supports random-access.");
222
223
#define _IO_FILEIO_SEEKABLE_METHODDEF    \
224
    {"seekable", (PyCFunction)_io_FileIO_seekable, METH_NOARGS, _io_FileIO_seekable__doc__},
225
226
static PyObject *
227
_io_FileIO_seekable_impl(fileio *self);
228
229
static PyObject *
230
_io_FileIO_seekable(PyObject *self, PyObject *Py_UNUSED(ignored))
231
140
{
232
140
    return _io_FileIO_seekable_impl((fileio *)self);
233
140
}
234
235
PyDoc_STRVAR(_io_FileIO_readinto__doc__,
236
"readinto($self, buffer, /)\n"
237
"--\n"
238
"\n"
239
"Same as RawIOBase.readinto().");
240
241
#define _IO_FILEIO_READINTO_METHODDEF    \
242
    {"readinto", _PyCFunction_CAST(_io_FileIO_readinto), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io_FileIO_readinto__doc__},
243
244
static PyObject *
245
_io_FileIO_readinto_impl(fileio *self, PyTypeObject *cls, Py_buffer *buffer);
246
247
static PyObject *
248
_io_FileIO_readinto(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
249
44
{
250
44
    PyObject *return_value = NULL;
251
44
    Py_buffer buffer = {NULL, NULL};
252
253
44
    if (!_PyArg_NoKwnames("readinto", kwnames)) {
254
0
        goto exit;
255
0
    }
256
44
    if (!_PyArg_CheckPositional("readinto", nargs, 1, 1)) {
257
0
        goto exit;
258
0
    }
259
44
    if (PyObject_GetBuffer(args[0], &buffer, PyBUF_WRITABLE) < 0) {
260
0
        _PyArg_BadArgument("readinto", "argument 1", "read-write bytes-like object", args[0]);
261
0
        goto exit;
262
0
    }
263
44
    return_value = _io_FileIO_readinto_impl((fileio *)self, cls, &buffer);
264
265
44
exit:
266
    /* Cleanup for buffer */
267
44
    if (buffer.obj) {
268
44
       PyBuffer_Release(&buffer);
269
44
    }
270
271
44
    return return_value;
272
44
}
273
274
PyDoc_STRVAR(_io_FileIO_readall__doc__,
275
"readall($self, /)\n"
276
"--\n"
277
"\n"
278
"Read all data from the file, returned as bytes.\n"
279
"\n"
280
"Reads until either there is an error or read() returns size 0\n"
281
"(indicates EOF).  If the file is already at EOF, returns an empty\n"
282
"bytes object.\n"
283
"\n"
284
"In non-blocking mode, returns as much data as could be read before\n"
285
"EAGAIN.  If no data is available (EAGAIN is returned before bytes\n"
286
"are read) returns None.");
287
288
#define _IO_FILEIO_READALL_METHODDEF    \
289
    {"readall", _PyCFunction_CAST(_io_FileIO_readall), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io_FileIO_readall__doc__},
290
291
static PyObject *
292
_io_FileIO_readall_impl(fileio *self, PyTypeObject *cls);
293
294
static PyObject *
295
_io_FileIO_readall(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
296
5.52k
{
297
5.52k
    if (nargs || (kwnames && PyTuple_GET_SIZE(kwnames))) {
298
0
        PyErr_SetString(PyExc_TypeError, "readall() takes no arguments");
299
0
        return NULL;
300
0
    }
301
5.52k
    return _io_FileIO_readall_impl((fileio *)self, cls);
302
5.52k
}
303
304
PyDoc_STRVAR(_io_FileIO_read__doc__,
305
"read($self, size=-1, /)\n"
306
"--\n"
307
"\n"
308
"Read at most size bytes, returned as bytes.\n"
309
"\n"
310
"If size is less than 0, read all bytes in the file making multiple\n"
311
"read calls.  See ``FileIO.readall``.\n"
312
"\n"
313
"Attempts to make only one system call, retrying only per PEP 475\n"
314
"(EINTR).  This means less data may be returned than requested.\n"
315
"\n"
316
"In non-blocking mode, returns None if no data is available.  Return\n"
317
"an empty bytes object at EOF.");
318
319
#define _IO_FILEIO_READ_METHODDEF    \
320
    {"read", _PyCFunction_CAST(_io_FileIO_read), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io_FileIO_read__doc__},
321
322
static PyObject *
323
_io_FileIO_read_impl(fileio *self, PyTypeObject *cls, Py_ssize_t size);
324
325
static PyObject *
326
_io_FileIO_read(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
327
0
{
328
0
    PyObject *return_value = NULL;
329
0
    Py_ssize_t size = -1;
330
331
0
    if (!_PyArg_NoKwnames("read", kwnames)) {
332
0
        goto exit;
333
0
    }
334
0
    if (!_PyArg_CheckPositional("read", nargs, 0, 1)) {
335
0
        goto exit;
336
0
    }
337
0
    if (nargs < 1) {
338
0
        goto skip_optional;
339
0
    }
340
0
    if (!_Py_convert_optional_to_ssize_t(args[0], &size)) {
341
0
        goto exit;
342
0
    }
343
0
skip_optional:
344
0
    return_value = _io_FileIO_read_impl((fileio *)self, cls, size);
345
346
0
exit:
347
0
    return return_value;
348
0
}
349
350
PyDoc_STRVAR(_io_FileIO_write__doc__,
351
"write($self, b, /)\n"
352
"--\n"
353
"\n"
354
"Write buffer b to file, return number of bytes written.\n"
355
"\n"
356
"Only makes one system call, so not all of the data may be written.\n"
357
"The number of bytes actually written is returned.  In non-blocking\n"
358
"mode, returns None if the write would block.");
359
360
#define _IO_FILEIO_WRITE_METHODDEF    \
361
    {"write", _PyCFunction_CAST(_io_FileIO_write), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io_FileIO_write__doc__},
362
363
static PyObject *
364
_io_FileIO_write_impl(fileio *self, PyTypeObject *cls, Py_buffer *b);
365
366
static PyObject *
367
_io_FileIO_write(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
368
161k
{
369
161k
    PyObject *return_value = NULL;
370
161k
    Py_buffer b = {NULL, NULL};
371
372
161k
    if (!_PyArg_NoKwnames("write", kwnames)) {
373
0
        goto exit;
374
0
    }
375
161k
    if (!_PyArg_CheckPositional("write", nargs, 1, 1)) {
376
0
        goto exit;
377
0
    }
378
161k
    if (PyObject_GetBuffer(args[0], &b, PyBUF_SIMPLE) != 0) {
379
0
        goto exit;
380
0
    }
381
161k
    return_value = _io_FileIO_write_impl((fileio *)self, cls, &b);
382
383
161k
exit:
384
    /* Cleanup for b */
385
161k
    if (b.obj) {
386
161k
       PyBuffer_Release(&b);
387
161k
    }
388
389
161k
    return return_value;
390
161k
}
391
392
PyDoc_STRVAR(_io_FileIO_seek__doc__,
393
"seek($self, pos, whence=0, /)\n"
394
"--\n"
395
"\n"
396
"Move to new file position and return the file position.\n"
397
"\n"
398
"Argument offset is a byte count.  Optional argument whence defaults\n"
399
"to SEEK_SET or 0 (offset from start of file, offset should be >= 0);\n"
400
"other values are SEEK_CUR or 1 (move relative to current position,\n"
401
"positive or negative), and SEEK_END or 2 (move relative to end of\n"
402
"file, usually negative, although many platforms allow seeking beyond\n"
403
"the end of a file).\n"
404
"\n"
405
"Note that not all file objects are seekable.");
406
407
#define _IO_FILEIO_SEEK_METHODDEF    \
408
    {"seek", _PyCFunction_CAST(_io_FileIO_seek), METH_FASTCALL, _io_FileIO_seek__doc__},
409
410
static PyObject *
411
_io_FileIO_seek_impl(fileio *self, PyObject *pos, int whence);
412
413
static PyObject *
414
_io_FileIO_seek(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
415
0
{
416
0
    PyObject *return_value = NULL;
417
0
    PyObject *pos;
418
0
    int whence = 0;
419
420
0
    if (!_PyArg_CheckPositional("seek", nargs, 1, 2)) {
421
0
        goto exit;
422
0
    }
423
0
    pos = args[0];
424
0
    if (nargs < 2) {
425
0
        goto skip_optional;
426
0
    }
427
0
    whence = PyLong_AsInt(args[1]);
428
0
    if (whence == -1 && PyErr_Occurred()) {
429
0
        goto exit;
430
0
    }
431
0
skip_optional:
432
0
    return_value = _io_FileIO_seek_impl((fileio *)self, pos, whence);
433
434
0
exit:
435
0
    return return_value;
436
0
}
437
438
PyDoc_STRVAR(_io_FileIO_tell__doc__,
439
"tell($self, /)\n"
440
"--\n"
441
"\n"
442
"Current file position.\n"
443
"\n"
444
"Can raise OSError for non seekable files.");
445
446
#define _IO_FILEIO_TELL_METHODDEF    \
447
    {"tell", (PyCFunction)_io_FileIO_tell, METH_NOARGS, _io_FileIO_tell__doc__},
448
449
static PyObject *
450
_io_FileIO_tell_impl(fileio *self);
451
452
static PyObject *
453
_io_FileIO_tell(PyObject *self, PyObject *Py_UNUSED(ignored))
454
23.1k
{
455
23.1k
    return _io_FileIO_tell_impl((fileio *)self);
456
23.1k
}
457
458
#if defined(HAVE_FTRUNCATE)
459
460
PyDoc_STRVAR(_io_FileIO_truncate__doc__,
461
"truncate($self, size=None, /)\n"
462
"--\n"
463
"\n"
464
"Truncate the file to at most size bytes and return the truncated size.\n"
465
"\n"
466
"Size defaults to the current file position, as returned by tell().\n"
467
"The current file position is changed to the value of size.");
468
469
#define _IO_FILEIO_TRUNCATE_METHODDEF    \
470
    {"truncate", _PyCFunction_CAST(_io_FileIO_truncate), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io_FileIO_truncate__doc__},
471
472
static PyObject *
473
_io_FileIO_truncate_impl(fileio *self, PyTypeObject *cls, PyObject *posobj);
474
475
static PyObject *
476
_io_FileIO_truncate(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
477
0
{
478
0
    PyObject *return_value = NULL;
479
0
    PyObject *posobj = Py_None;
480
481
0
    if (!_PyArg_NoKwnames("truncate", kwnames)) {
482
0
        goto exit;
483
0
    }
484
0
    if (!_PyArg_CheckPositional("truncate", nargs, 0, 1)) {
485
0
        goto exit;
486
0
    }
487
0
    if (nargs < 1) {
488
0
        goto skip_optional;
489
0
    }
490
0
    posobj = args[0];
491
0
skip_optional:
492
0
    return_value = _io_FileIO_truncate_impl((fileio *)self, cls, posobj);
493
494
0
exit:
495
0
    return return_value;
496
0
}
497
498
#endif /* defined(HAVE_FTRUNCATE) */
499
500
PyDoc_STRVAR(_io_FileIO_isatty__doc__,
501
"isatty($self, /)\n"
502
"--\n"
503
"\n"
504
"True if the file is connected to a TTY device.");
505
506
#define _IO_FILEIO_ISATTY_METHODDEF    \
507
    {"isatty", (PyCFunction)_io_FileIO_isatty, METH_NOARGS, _io_FileIO_isatty__doc__},
508
509
static PyObject *
510
_io_FileIO_isatty_impl(fileio *self);
511
512
static PyObject *
513
_io_FileIO_isatty(PyObject *self, PyObject *Py_UNUSED(ignored))
514
111
{
515
111
    return _io_FileIO_isatty_impl((fileio *)self);
516
111
}
517
518
PyDoc_STRVAR(_io_FileIO__isatty_open_only__doc__,
519
"_isatty_open_only($self, /)\n"
520
"--\n"
521
"\n");
522
523
#define _IO_FILEIO__ISATTY_OPEN_ONLY_METHODDEF    \
524
    {"_isatty_open_only", (PyCFunction)_io_FileIO__isatty_open_only, METH_NOARGS, _io_FileIO__isatty_open_only__doc__},
525
526
static PyObject *
527
_io_FileIO__isatty_open_only_impl(fileio *self);
528
529
static PyObject *
530
_io_FileIO__isatty_open_only(PyObject *self, PyObject *Py_UNUSED(ignored))
531
23.0k
{
532
23.0k
    return _io_FileIO__isatty_open_only_impl((fileio *)self);
533
23.0k
}
534
535
PyDoc_STRVAR(_io_FileIO_closed__doc__,
536
"True if the file is closed.");
537
538
static int
539
_io_FileIO_closed_get_impl(fileio *self);
540
541
static PyObject *
542
_io_FileIO_closed_get(PyObject *self, void *Py_UNUSED(context))
543
68.8k
{
544
68.8k
    PyObject *return_value = NULL;
545
68.8k
    int _return_value;
546
547
68.8k
    _return_value = _io_FileIO_closed_get_impl((fileio *)self);
548
68.8k
    if ((_return_value == -1) && PyErr_Occurred()) {
549
0
        goto exit;
550
0
    }
551
68.8k
    return_value = PyBool_FromLong((long)_return_value);
552
553
68.8k
exit:
554
68.8k
    return return_value;
555
68.8k
}
556
557
PyDoc_STRVAR(_io_FileIO_closefd__doc__,
558
"True if the file descriptor will be closed by close().");
559
560
static int
561
_io_FileIO_closefd_get_impl(fileio *self);
562
563
static PyObject *
564
_io_FileIO_closefd_get(PyObject *self, void *Py_UNUSED(context))
565
0
{
566
0
    PyObject *return_value = NULL;
567
0
    int _return_value;
568
569
0
    _return_value = _io_FileIO_closefd_get_impl((fileio *)self);
570
0
    if ((_return_value == -1) && PyErr_Occurred()) {
571
0
        goto exit;
572
0
    }
573
0
    return_value = PyBool_FromLong((long)_return_value);
574
575
0
exit:
576
0
    return return_value;
577
0
}
578
579
PyDoc_STRVAR(_io_FileIO_mode__doc__,
580
"String giving the file mode.");
581
582
static PyObject *
583
_io_FileIO_mode_get_impl(fileio *self);
584
585
static PyObject *
586
_io_FileIO_mode_get(PyObject *self, void *Py_UNUSED(context))
587
3
{
588
3
    return _io_FileIO_mode_get_impl((fileio *)self);
589
3
}
590
591
PyDoc_STRVAR(_io_FileIO__blksize__doc__,
592
"Stat st_blksize if available.");
593
594
static long
595
_io_FileIO__blksize_get_impl(fileio *self);
596
597
static PyObject *
598
_io_FileIO__blksize_get(PyObject *self, void *Py_UNUSED(context))
599
23.0k
{
600
23.0k
    PyObject *return_value = NULL;
601
23.0k
    long _return_value;
602
603
23.0k
    _return_value = _io_FileIO__blksize_get_impl((fileio *)self);
604
23.0k
    if ((_return_value == -1) && PyErr_Occurred()) {
605
0
        goto exit;
606
0
    }
607
23.0k
    return_value = PyLong_FromLong(_return_value);
608
609
23.0k
exit:
610
23.0k
    return return_value;
611
23.0k
}
612
613
#ifndef _IO_FILEIO_TRUNCATE_METHODDEF
614
    #define _IO_FILEIO_TRUNCATE_METHODDEF
615
#endif /* !defined(_IO_FILEIO_TRUNCATE_METHODDEF) */
616
#define _IO_FILEIO_CLOSED_GETSETDEF {"closed", (getter)_io_FileIO_closed_get, (setter)NULL, _io_FileIO_closed__doc__},
617
618
#define _IO_FILEIO_CLOSEFD_GETSETDEF {"closefd", (getter)_io_FileIO_closefd_get, (setter)NULL, _io_FileIO_closefd__doc__},
619
620
#define _IO_FILEIO_MODE_GETSETDEF {"mode", (getter)_io_FileIO_mode_get, (setter)NULL, _io_FileIO_mode__doc__},
621
622
#define _IO_FILEIO__BLKSIZE_GETSETDEF {"_blksize", (getter)_io_FileIO__blksize_get, (setter)NULL, _io_FileIO__blksize__doc__},
623
624
/*[clinic end generated code: output=b8d6d338bfd0a58f input=a9049054013a1b77]*/