Mercurial > cpython-lru_cache-weakref
diff Python/modsupport.c @ 12520:b6b7bd20c845 legacy-trunk
Brian Hooper <brian_takashi@hotmail.com>:
Here's a patch which changes modsupport to add 'u' and 'u#',
to support building Unicode objects from a null-terminated
Py_UNICODE *, and a Py_UNICODE * with length, respectively.
[Conversion from 'U' to 'u' by Fred, based on python-dev comments.]
Note that the use of None for NULL values of the Py_UNICODE* value is
still in; I'm not sure of the conclusion on that issue.
| author | Fred Drake <fdrake@acm.org> |
|---|---|
| date | Fri, 28 Apr 2000 14:42:37 +0000 |
| parents | 98e37347378b |
| children | 8c8de5b736dc |
line wrap: on
line diff
--- a/Python/modsupport.c Fri Apr 28 13:31:52 2000 +0000 +++ b/Python/modsupport.c Fri Apr 28 14:42:37 2000 +0000 @@ -232,6 +232,15 @@ return v; } +static int +_ustrlen(Py_UNICODE *u) +{ + int i = 0; + Py_UNICODE *v = u; + while (*v != 0) { i++; v++; } + return i; +} + static PyObject * do_mktuple(p_format, p_va, endchar, n) char **p_format; @@ -295,7 +304,28 @@ case 'L': return PyLong_FromLongLong((LONG_LONG)va_arg(*p_va, LONG_LONG)); #endif - + case 'u': + { + PyObject *v; + Py_UNICODE *u = va_arg(*p_va, Py_UNICODE *); + int n; + if (**p_format == '#') { + ++*p_format; + n = va_arg(*p_va, int); + } + else + n = -1; + if (u == NULL) { + v = Py_None; + Py_INCREF(v); + } + else { + if (n < 0) + n = _ustrlen(u); + v = PyUnicode_FromUnicode(u, n); + } + return v; + } case 'f': case 'd': return PyFloat_FromDouble(
