static PyObject * _io__RawIOBase_readall_impl(PyObject *self) /*[clinic end generated code: output=1987b9ce929425a0 input=688874141213622a]*/ { int r; PyObject *chunks = PyList_New(0); PyObject *result; if (chunks == NULL) return NULL; while (1) { PyObject *data = _PyObject_CallMethodId(self, &PyId_read, "i", DEFAULT_BUFFER_SIZE); if (!data) { /* NOTE: PyErr_SetFromErrno() calls PyErr_CheckSignals() when EINTR occurs so we needn't do it ourselves. */ if (_PyIO_trap_eintr()) { continue; } Py_DECREF(chunks); return NULL; } if (data == Py_None) { if (PyList_GET_SIZE(chunks) == 0) { Py_DECREF(chunks); return data; } Py_DECREF(data); break; } if (!PyBytes_Check(data)) { Py_DECREF(chunks); Py_DECREF(data); PyErr_SetString(PyExc_TypeError, "read() should return bytes"); return NULL; } if (PyBytes_GET_SIZE(data) == 0) { /* EOF */ Py_DECREF(data); break; } r = PyList_Append(chunks, data); Py_DECREF(data); if (r < 0) { Py_DECREF(chunks); return NULL; } } result = _PyBytes_Join(_PyIO_empty_bytes, chunks); Py_DECREF(chunks); return result; }
static PyObject * rawiobase_readall(PyObject *self, PyObject *args) { int r; PyObject *chunks = PyList_New(0); PyObject *result; if (chunks == NULL) return NULL; while (1) { _Py_IDENTIFIER(read); PyObject *data = _PyObject_CallMethodId(self, &PyId_read, "i", DEFAULT_BUFFER_SIZE); if (!data) { /* NOTE: PyErr_SetFromErrno() calls PyErr_CheckSignals() when EINTR occurs so we needn't do it ourselves. */ if (_PyIO_trap_eintr()) { continue; } Py_DECREF(chunks); return NULL; } if (data == Py_None) { if (PyList_GET_SIZE(chunks) == 0) { Py_DECREF(chunks); return data; } Py_DECREF(data); break; } if (!PyBytes_Check(data)) { Py_DECREF(chunks); Py_DECREF(data); PyErr_SetString(PyExc_TypeError, "read() should return bytes"); return NULL; } if (PyBytes_GET_SIZE(data) == 0) { /* EOF */ Py_DECREF(data); break; } r = PyList_Append(chunks, data); Py_DECREF(data); if (r < 0) { Py_DECREF(chunks); return NULL; } } result = _PyBytes_Join(_PyIO_empty_bytes, chunks); Py_DECREF(chunks); return result; }
static PyObject * iobase_writelines(PyObject *self, PyObject *args) { PyObject *lines, *iter, *res; if (!PyArg_ParseTuple(args, "O:writelines", &lines)) { return NULL; } if (_PyIOBase_check_closed(self, Py_True) == NULL) return NULL; iter = PyObject_GetIter(lines); if (iter == NULL) return NULL; while (1) { PyObject *line = PyIter_Next(iter); if (line == NULL) { if (PyErr_Occurred()) { Py_DECREF(iter); return NULL; } else break; /* Stop Iteration */ } res = NULL; do { res = PyObject_CallMethodObjArgs(self, _PyIO_str_write, line, NULL); } while (res == NULL && _PyIO_trap_eintr()); Py_DECREF(line); if (res == NULL) { Py_DECREF(iter); return NULL; } Py_DECREF(res); } Py_DECREF(iter); Py_RETURN_NONE; }
static PyObject * _io__IOBase_writelines(PyObject *self, PyObject *lines) /*[clinic end generated code: output=976eb0a9b60a6628 input=432e729a8450b3cb]*/ { PyObject *iter, *res; if (iobase_check_closed(self)) return NULL; iter = PyObject_GetIter(lines); if (iter == NULL) return NULL; while (1) { PyObject *line = PyIter_Next(iter); if (line == NULL) { if (PyErr_Occurred()) { Py_DECREF(iter); return NULL; } else break; /* Stop Iteration */ } res = NULL; do { res = PyObject_CallMethodObjArgs(self, _PyIO_str_write, line, NULL); } while (res == NULL && _PyIO_trap_eintr()); Py_DECREF(line); if (res == NULL) { Py_DECREF(iter); return NULL; } Py_DECREF(res); } Py_DECREF(iter); Py_RETURN_NONE; }
static PyObject * _io__IOBase_readline_impl(PyObject *self, Py_ssize_t limit) /*[clinic end generated code: output=4479f79b58187840 input=d0c596794e877bff]*/ { /* For backwards compatibility, a (slowish) readline(). */ PyObject *peek, *buffer, *result; Py_ssize_t old_size = -1; if (_PyObject_LookupAttr(self, _PyIO_str_peek, &peek) < 0) { return NULL; } buffer = PyByteArray_FromStringAndSize(NULL, 0); if (buffer == NULL) { Py_XDECREF(peek); return NULL; } while (limit < 0 || PyByteArray_GET_SIZE(buffer) < limit) { Py_ssize_t nreadahead = 1; PyObject *b; if (peek != NULL) { PyObject *readahead = PyObject_CallFunctionObjArgs(peek, _PyLong_One, NULL); if (readahead == NULL) { /* NOTE: PyErr_SetFromErrno() calls PyErr_CheckSignals() when EINTR occurs so we needn't do it ourselves. */ if (_PyIO_trap_eintr()) { continue; } goto fail; } if (!PyBytes_Check(readahead)) { PyErr_Format(PyExc_OSError, "peek() should have returned a bytes object, " "not '%.200s'", Py_TYPE(readahead)->tp_name); Py_DECREF(readahead); goto fail; } if (PyBytes_GET_SIZE(readahead) > 0) { Py_ssize_t n = 0; const char *buf = PyBytes_AS_STRING(readahead); if (limit >= 0) { do { if (n >= PyBytes_GET_SIZE(readahead) || n >= limit) break; if (buf[n++] == '\n') break; } while (1); } else { do { if (n >= PyBytes_GET_SIZE(readahead)) break; if (buf[n++] == '\n') break; } while (1); } nreadahead = n; } Py_DECREF(readahead); } b = _PyObject_CallMethodId(self, &PyId_read, "n", nreadahead); if (b == NULL) { /* NOTE: PyErr_SetFromErrno() calls PyErr_CheckSignals() when EINTR occurs so we needn't do it ourselves. */ if (_PyIO_trap_eintr()) { continue; } goto fail; } if (!PyBytes_Check(b)) { PyErr_Format(PyExc_OSError, "read() should have returned a bytes object, " "not '%.200s'", Py_TYPE(b)->tp_name); Py_DECREF(b); goto fail; } if (PyBytes_GET_SIZE(b) == 0) { Py_DECREF(b); break; } old_size = PyByteArray_GET_SIZE(buffer); if (PyByteArray_Resize(buffer, old_size + PyBytes_GET_SIZE(b)) < 0) { Py_DECREF(b); goto fail; } memcpy(PyByteArray_AS_STRING(buffer) + old_size, PyBytes_AS_STRING(b), PyBytes_GET_SIZE(b)); Py_DECREF(b); if (PyByteArray_AS_STRING(buffer)[PyByteArray_GET_SIZE(buffer) - 1] == '\n') break; } result = PyBytes_FromStringAndSize(PyByteArray_AS_STRING(buffer), PyByteArray_GET_SIZE(buffer)); Py_XDECREF(peek); Py_DECREF(buffer); return result; fail: Py_XDECREF(peek); Py_DECREF(buffer); return NULL; }
static PyObject * iobase_readline(PyObject *self, PyObject *args) { /* For backwards compatibility, a (slowish) readline(). */ Py_ssize_t limit = -1; int has_peek = 0; PyObject *buffer, *result; Py_ssize_t old_size = -1; _Py_IDENTIFIER(read); _Py_IDENTIFIER(peek); if (!PyArg_ParseTuple(args, "|O&:readline", &_PyIO_ConvertSsize_t, &limit)) { return NULL; } if (_PyObject_HasAttrId(self, &PyId_peek)) has_peek = 1; buffer = PyByteArray_FromStringAndSize(NULL, 0); if (buffer == NULL) return NULL; while (limit < 0 || Py_SIZE(buffer) < limit) { Py_ssize_t nreadahead = 1; PyObject *b; if (has_peek) { PyObject *readahead = _PyObject_CallMethodId(self, &PyId_peek, "i", 1); if (readahead == NULL) { /* NOTE: PyErr_SetFromErrno() calls PyErr_CheckSignals() when EINTR occurs so we needn't do it ourselves. */ if (_PyIO_trap_eintr()) { continue; } goto fail; } if (!PyBytes_Check(readahead)) { PyErr_Format(PyExc_IOError, "peek() should have returned a bytes object, " "not '%.200s'", Py_TYPE(readahead)->tp_name); Py_DECREF(readahead); goto fail; } if (PyBytes_GET_SIZE(readahead) > 0) { Py_ssize_t n = 0; const char *buf = PyBytes_AS_STRING(readahead); if (limit >= 0) { do { if (n >= PyBytes_GET_SIZE(readahead) || n >= limit) break; if (buf[n++] == '\n') break; } while (1); } else { do { if (n >= PyBytes_GET_SIZE(readahead)) break; if (buf[n++] == '\n') break; } while (1); } nreadahead = n; } Py_DECREF(readahead); } b = _PyObject_CallMethodId(self, &PyId_read, "n", nreadahead); if (b == NULL) { /* NOTE: PyErr_SetFromErrno() calls PyErr_CheckSignals() when EINTR occurs so we needn't do it ourselves. */ if (_PyIO_trap_eintr()) { continue; } goto fail; } if (!PyBytes_Check(b)) { PyErr_Format(PyExc_IOError, "read() should have returned a bytes object, " "not '%.200s'", Py_TYPE(b)->tp_name); Py_DECREF(b); goto fail; } if (PyBytes_GET_SIZE(b) == 0) { Py_DECREF(b); break; } old_size = PyByteArray_GET_SIZE(buffer); PyByteArray_Resize(buffer, old_size + PyBytes_GET_SIZE(b)); memcpy(PyByteArray_AS_STRING(buffer) + old_size, PyBytes_AS_STRING(b), PyBytes_GET_SIZE(b)); Py_DECREF(b); if (PyByteArray_AS_STRING(buffer)[PyByteArray_GET_SIZE(buffer) - 1] == '\n') break; } result = PyBytes_FromStringAndSize(PyByteArray_AS_STRING(buffer), PyByteArray_GET_SIZE(buffer)); Py_DECREF(buffer); return result; fail: Py_DECREF(buffer); return NULL; }