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.
This commit is contained in:
Fred Drake 2000-04-28 14:42:37 +00:00
parent 6664bb87dc
commit 25d34473c3
1 changed files with 31 additions and 1 deletions

View File

@ -232,6 +232,15 @@ do_mklist(p_format, p_va, endchar, n)
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 @@ do_mkvalue(p_format, p_va)
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(