summaryrefslogtreecommitdiffstats
path: root/Python/codecs.c
diff options
context:
space:
mode:
authorThomas Wouters <thomas@python.org>2006-04-21 09:43:23 (GMT)
committerThomas Wouters <thomas@python.org>2006-04-21 09:43:23 (GMT)
commita977329b6fb0e4c95cabb9043794de69b27a1099 (patch)
treeb91552a0578639bd10181ab612039c1bed9bec27 /Python/codecs.c
parentd858f70617a9df8456e89a898ad8f97bd57c09f9 (diff)
downloadcpython-a977329b6fb0e4c95cabb9043794de69b27a1099.zip
cpython-a977329b6fb0e4c95cabb9043794de69b27a1099.tar.gz
cpython-a977329b6fb0e4c95cabb9043794de69b27a1099.tar.bz2
Merge part of the trunk changes into the p3yk branch. This merges from 43030
(branch-creation time) up to 43067. 43068 and 43069 contain a little swapping action between re.py and sre.py, and this mightily confuses svn merge, so later changes are going in separately. This merge should break no additional tests. The last-merged revision is going in a 'last_merge' property on '.' (the branch directory.) Arbitrarily chosen, really; if there's a BCP for this, I couldn't find it, but we can easily change it afterwards ;)
Diffstat (limited to 'Python/codecs.c')
-rw-r--r--Python/codecs.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/Python/codecs.c b/Python/codecs.c
index 253bc39..0e8c374 100644
--- a/Python/codecs.c
+++ b/Python/codecs.c
@@ -260,6 +260,56 @@ PyObject *PyCodec_Decoder(const char *encoding)
return NULL;
}
+PyObject *PyCodec_IncrementalEncoder(const char *encoding,
+ const char *errors)
+{
+ PyObject *codecs, *ret, *encoder;
+
+ codecs = _PyCodec_Lookup(encoding);
+ if (codecs == NULL)
+ goto onError;
+ encoder = PyObject_GetAttrString(codecs, "incrementalencoder");
+ if (encoder == NULL) {
+ Py_DECREF(codecs);
+ return NULL;
+ }
+ if (errors)
+ ret = PyObject_CallFunction(encoder, "O", errors);
+ else
+ ret = PyObject_CallFunction(encoder, NULL);
+ Py_DECREF(encoder);
+ Py_DECREF(codecs);
+ return ret;
+
+ onError:
+ return NULL;
+}
+
+PyObject *PyCodec_IncrementalDecoder(const char *encoding,
+ const char *errors)
+{
+ PyObject *codecs, *ret, *decoder;
+
+ codecs = _PyCodec_Lookup(encoding);
+ if (codecs == NULL)
+ goto onError;
+ decoder = PyObject_GetAttrString(codecs, "incrementaldecoder");
+ if (decoder == NULL) {
+ Py_DECREF(codecs);
+ return NULL;
+ }
+ if (errors)
+ ret = PyObject_CallFunction(decoder, "O", errors);
+ else
+ ret = PyObject_CallFunction(decoder, NULL);
+ Py_DECREF(decoder);
+ Py_DECREF(codecs);
+ return ret;
+
+ onError:
+ return NULL;
+}
+
PyObject *PyCodec_StreamReader(const char *encoding,
PyObject *stream,
const char *errors)