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:
parent
6664bb87dc
commit
25d34473c3
|
@ -232,6 +232,15 @@ do_mklist(p_format, p_va, endchar, n)
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_ustrlen(Py_UNICODE *u)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
Py_UNICODE *v = u;
|
||||||
|
while (*v != 0) { i++; v++; }
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
do_mktuple(p_format, p_va, endchar, n)
|
do_mktuple(p_format, p_va, endchar, n)
|
||||||
char **p_format;
|
char **p_format;
|
||||||
|
@ -295,7 +304,28 @@ do_mkvalue(p_format, p_va)
|
||||||
case 'L':
|
case 'L':
|
||||||
return PyLong_FromLongLong((LONG_LONG)va_arg(*p_va, LONG_LONG));
|
return PyLong_FromLongLong((LONG_LONG)va_arg(*p_va, LONG_LONG));
|
||||||
#endif
|
#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 'f':
|
||||||
case 'd':
|
case 'd':
|
||||||
return PyFloat_FromDouble(
|
return PyFloat_FromDouble(
|
||||||
|
|
Loading…
Reference in New Issue