diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-10-02 18:30:35 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-10-02 18:30:35 (GMT) |
commit | b3648576cd76232e618ecc227541c7b722355f6e (patch) | |
tree | 7e3348aca1818955eba0c1d88d8934118f5c8473 /Modules/_testcapimodule.c | |
parent | 1edebef724012a4dff48ec3eb2b41981b1610fdd (diff) | |
parent | cc164232aa736006d3c45ee76680c14738e2f9e6 (diff) | |
download | cpython-b3648576cd76232e618ecc227541c7b722355f6e.zip cpython-b3648576cd76232e618ecc227541c7b722355f6e.tar.gz cpython-b3648576cd76232e618ecc227541c7b722355f6e.tar.bz2 |
Issue #28295: Fixed the documentation and added tests for PyUnicode_AsUCS4().
Original patch by Xiang Zhang.
Diffstat (limited to 'Modules/_testcapimodule.c')
-rw-r--r-- | Modules/_testcapimodule.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index b5b8f1a..a6cd386 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -1829,6 +1829,36 @@ unicode_aswidecharstring(PyObject *self, PyObject *args) } static PyObject * +unicode_asucs4(PyObject *self, PyObject *args) +{ + PyObject *unicode, *result; + Py_UCS4 *buffer; + int copy_null; + Py_ssize_t str_len, buf_len; + + if (!PyArg_ParseTuple(args, "Unp:unicode_asucs4", &unicode, &str_len, ©_null)) { + return NULL; + } + + buf_len = str_len + 1; + buffer = PyMem_NEW(Py_UCS4, buf_len); + if (buffer == NULL) { + return PyErr_NoMemory(); + } + memset(buffer, 0, sizeof(Py_UCS4)*buf_len); + buffer[str_len] = 0xffffU; + + if (!PyUnicode_AsUCS4(unicode, buffer, buf_len, copy_null)) { + PyMem_FREE(buffer); + return NULL; + } + + result = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, buffer, buf_len); + PyMem_FREE(buffer); + return result; +} + +static PyObject * unicode_encodedecimal(PyObject *self, PyObject *args) { Py_UNICODE *unicode; @@ -4030,6 +4060,7 @@ static PyMethodDef TestMethods[] = { {"test_widechar", (PyCFunction)test_widechar, METH_NOARGS}, {"unicode_aswidechar", unicode_aswidechar, METH_VARARGS}, {"unicode_aswidecharstring",unicode_aswidecharstring, METH_VARARGS}, + {"unicode_asucs4", unicode_asucs4, METH_VARARGS}, {"unicode_encodedecimal", unicode_encodedecimal, METH_VARARGS}, {"unicode_transformdecimaltoascii", unicode_transformdecimaltoascii, METH_VARARGS}, {"unicode_legacy_string", unicode_legacy_string, METH_VARARGS}, |