summaryrefslogtreecommitdiffstats
path: root/Modules/_io/textio.c
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2014-12-22 03:00:51 (GMT)
committerBenjamin Peterson <benjamin@python.org>2014-12-22 03:00:51 (GMT)
commit98beb7599e7b5991f92f1c0bd83ce7e50f1cdc33 (patch)
tree00175e19bf10ce9fdaaa75e1c7580bb3d296c529 /Modules/_io/textio.c
parent4d6a3d6c01abc468ec85395c58f1a36f6f16560e (diff)
parent10e76b67c9bb2f6febeb7f264478532cbe985ecd (diff)
downloadcpython-98beb7599e7b5991f92f1c0bd83ce7e50f1cdc33.zip
cpython-98beb7599e7b5991f92f1c0bd83ce7e50f1cdc33.tar.gz
cpython-98beb7599e7b5991f92f1c0bd83ce7e50f1cdc33.tar.bz2
merge 3.4 (#23093)
Diffstat (limited to 'Modules/_io/textio.c')
-rw-r--r--Modules/_io/textio.c78
1 files changed, 40 insertions, 38 deletions
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c
index 0f53b0f..9fb4ef9 100644
--- a/Modules/_io/textio.c
+++ b/Modules/_io/textio.c
@@ -1219,25 +1219,27 @@ textiowrapper_closed_get(textio *self, void *context);
#define CHECK_INITIALIZED(self) \
if (self->ok <= 0) { \
- if (self->detached) { \
- PyErr_SetString(PyExc_ValueError, \
- "underlying buffer has been detached"); \
- } else { \
- PyErr_SetString(PyExc_ValueError, \
- "I/O operation on uninitialized object"); \
- } \
+ PyErr_SetString(PyExc_ValueError, \
+ "I/O operation on uninitialized object"); \
+ return NULL; \
+ }
+
+#define CHECK_ATTACHED(self) \
+ CHECK_INITIALIZED(self); \
+ if (self->detached) { \
+ PyErr_SetString(PyExc_ValueError, \
+ "underlying buffer has been detached"); \
return NULL; \
}
-#define CHECK_INITIALIZED_INT(self) \
+#define CHECK_ATTACHED_INT(self) \
if (self->ok <= 0) { \
- if (self->detached) { \
- PyErr_SetString(PyExc_ValueError, \
- "underlying buffer has been detached"); \
- } else { \
- PyErr_SetString(PyExc_ValueError, \
- "I/O operation on uninitialized object"); \
- } \
+ PyErr_SetString(PyExc_ValueError, \
+ "I/O operation on uninitialized object"); \
+ return -1; \
+ } else if (self->detached) { \
+ PyErr_SetString(PyExc_ValueError, \
+ "underlying buffer has been detached"); \
return -1; \
}
@@ -1246,7 +1248,7 @@ static PyObject *
textiowrapper_detach(textio *self)
{
PyObject *buffer, *res;
- CHECK_INITIALIZED(self);
+ CHECK_ATTACHED(self);
res = PyObject_CallMethodObjArgs((PyObject *)self, _PyIO_str_flush, NULL);
if (res == NULL)
return NULL;
@@ -1254,7 +1256,6 @@ textiowrapper_detach(textio *self)
buffer = self->buffer;
self->buffer = NULL;
self->detached = 1;
- self->ok = 0;
return buffer;
}
@@ -1299,7 +1300,7 @@ textiowrapper_write(textio *self, PyObject *args)
int haslf = 0;
int needflush = 0, text_needflush = 0;
- CHECK_INITIALIZED(self);
+ CHECK_ATTACHED(self);
if (!PyArg_ParseTuple(args, "U:write", &text)) {
return NULL;
@@ -1562,7 +1563,7 @@ textiowrapper_read(textio *self, PyObject *args)
Py_ssize_t n = -1;
PyObject *result = NULL, *chunks = NULL;
- CHECK_INITIALIZED(self);
+ CHECK_ATTACHED(self);
if (!PyArg_ParseTuple(args, "|O&:read", &_PyIO_ConvertSsize_t, &n))
return NULL;
@@ -1937,7 +1938,7 @@ textiowrapper_readline(textio *self, PyObject *args)
{
Py_ssize_t limit = -1;
- CHECK_INITIALIZED(self);
+ CHECK_ATTACHED(self);
if (!PyArg_ParseTuple(args, "|n:readline", &limit)) {
return NULL;
}
@@ -2075,7 +2076,7 @@ textiowrapper_seek(textio *self, PyObject *args)
PyObject *res;
int cmp;
- CHECK_INITIALIZED(self);
+ CHECK_ATTACHED(self);
if (!PyArg_ParseTuple(args, "O|i:seek", &cookieObj, &whence))
return NULL;
@@ -2255,7 +2256,7 @@ textiowrapper_tell(textio *self, PyObject *args)
Py_ssize_t dec_buffer_len;
int dec_flags;
- CHECK_INITIALIZED(self);
+ CHECK_ATTACHED(self);
CHECK_CLOSED(self);
if (!self->seekable) {
@@ -2458,7 +2459,7 @@ textiowrapper_truncate(textio *self, PyObject *args)
PyObject *pos = Py_None;
PyObject *res;
- CHECK_INITIALIZED(self)
+ CHECK_ATTACHED(self)
if (!PyArg_ParseTuple(args, "|O:truncate", &pos)) {
return NULL;
}
@@ -2481,9 +2482,10 @@ textiowrapper_repr(textio *self)
res = PyUnicode_FromString("<_io.TextIOWrapper");
if (res == NULL)
return NULL;
+
nameobj = _PyObject_GetAttrId((PyObject *) self, &PyId_name);
if (nameobj == NULL) {
- if (PyErr_ExceptionMatches(PyExc_AttributeError))
+ if (PyErr_ExceptionMatches(PyExc_Exception))
PyErr_Clear();
else
goto error;
@@ -2499,7 +2501,7 @@ textiowrapper_repr(textio *self)
}
modeobj = _PyObject_GetAttrId((PyObject *) self, &PyId_mode);
if (modeobj == NULL) {
- if (PyErr_ExceptionMatches(PyExc_AttributeError))
+ if (PyErr_ExceptionMatches(PyExc_Exception))
PyErr_Clear();
else
goto error;
@@ -2528,35 +2530,35 @@ error:
static PyObject *
textiowrapper_fileno(textio *self, PyObject *args)
{
- CHECK_INITIALIZED(self);
+ CHECK_ATTACHED(self);
return _PyObject_CallMethodId(self->buffer, &PyId_fileno, NULL);
}
static PyObject *
textiowrapper_seekable(textio *self, PyObject *args)
{
- CHECK_INITIALIZED(self);
+ CHECK_ATTACHED(self);
return _PyObject_CallMethodId(self->buffer, &PyId_seekable, NULL);
}
static PyObject *
textiowrapper_readable(textio *self, PyObject *args)
{
- CHECK_INITIALIZED(self);
+ CHECK_ATTACHED(self);
return _PyObject_CallMethodId(self->buffer, &PyId_readable, NULL);
}
static PyObject *
textiowrapper_writable(textio *self, PyObject *args)
{
- CHECK_INITIALIZED(self);
+ CHECK_ATTACHED(self);
return _PyObject_CallMethodId(self->buffer, &PyId_writable, NULL);
}
static PyObject *
textiowrapper_isatty(textio *self, PyObject *args)
{
- CHECK_INITIALIZED(self);
+ CHECK_ATTACHED(self);
return _PyObject_CallMethodId(self->buffer, &PyId_isatty, NULL);
}
@@ -2571,7 +2573,7 @@ textiowrapper_getstate(textio *self, PyObject *args)
static PyObject *
textiowrapper_flush(textio *self, PyObject *args)
{
- CHECK_INITIALIZED(self);
+ CHECK_ATTACHED(self);
CHECK_CLOSED(self);
self->telling = self->seekable;
if (_textiowrapper_writeflush(self) < 0)
@@ -2584,7 +2586,7 @@ textiowrapper_close(textio *self, PyObject *args)
{
PyObject *res;
int r;
- CHECK_INITIALIZED(self);
+ CHECK_ATTACHED(self);
res = textiowrapper_closed_get(self, NULL);
if (res == NULL)
@@ -2626,7 +2628,7 @@ textiowrapper_iternext(textio *self)
{
PyObject *line;
- CHECK_INITIALIZED(self);
+ CHECK_ATTACHED(self);
self->telling = 0;
if (Py_TYPE(self) == &PyTextIOWrapper_Type) {
@@ -2662,14 +2664,14 @@ textiowrapper_iternext(textio *self)
static PyObject *
textiowrapper_name_get(textio *self, void *context)
{
- CHECK_INITIALIZED(self);
+ CHECK_ATTACHED(self);
return _PyObject_GetAttrId(self->buffer, &PyId_name);
}
static PyObject *
textiowrapper_closed_get(textio *self, void *context)
{
- CHECK_INITIALIZED(self);
+ CHECK_ATTACHED(self);
return PyObject_GetAttr(self->buffer, _PyIO_str_closed);
}
@@ -2677,7 +2679,7 @@ static PyObject *
textiowrapper_newlines_get(textio *self, void *context)
{
PyObject *res;
- CHECK_INITIALIZED(self);
+ CHECK_ATTACHED(self);
if (self->decoder == NULL)
Py_RETURN_NONE;
res = PyObject_GetAttr(self->decoder, _PyIO_str_newlines);
@@ -2703,7 +2705,7 @@ textiowrapper_errors_get(textio *self, void *context)
static PyObject *
textiowrapper_chunk_size_get(textio *self, void *context)
{
- CHECK_INITIALIZED(self);
+ CHECK_ATTACHED(self);
return PyLong_FromSsize_t(self->chunk_size);
}
@@ -2711,7 +2713,7 @@ static int
textiowrapper_chunk_size_set(textio *self, PyObject *arg, void *context)
{
Py_ssize_t n;
- CHECK_INITIALIZED_INT(self);
+ CHECK_ATTACHED_INT(self);
n = PyNumber_AsSsize_t(arg, PyExc_ValueError);
if (n == -1 && PyErr_Occurred())
return -1;