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