summaryrefslogtreecommitdiff
path: root/Python/getargs.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/getargs.c')
-rw-r--r--Python/getargs.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/Python/getargs.c b/Python/getargs.c
index 2d9e2b712b..4617d0515e 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -585,7 +585,13 @@ convertsimple1(arg, p_format, p_va)
char **p = va_arg(*p_va, char **);
if (PyString_Check(arg))
- *p = PyString_AsString(arg);
+ *p = PyString_AS_STRING(arg);
+ else if (PyUnicode_Check(arg)) {
+ arg = PyUnicode_AsUTF8String(arg);
+ if (arg == NULL)
+ return "unicode conversion error";
+ *p = PyString_AS_STRING(arg);
+ }
else
return "string";
if ((int)strlen(*p) != PyString_Size(arg))
@@ -625,6 +631,12 @@ convertsimple1(arg, p_format, p_va)
*p = 0;
else if (PyString_Check(arg))
*p = PyString_AsString(arg);
+ else if (PyUnicode_Check(arg)) {
+ arg = PyUnicode_AsUTF8String(arg);
+ if (arg == NULL)
+ return "unicode conversion error";
+ *p = PyString_AS_STRING(arg);
+ }
else
return "None or string";
if (*format == '#') {
@@ -652,6 +664,16 @@ convertsimple1(arg, p_format, p_va)
break;
}
+ case 'U': /* Unicode object */
+ {
+ PyObject **p = va_arg(*p_va, PyObject **);
+ if (PyUnicode_Check(arg))
+ *p = arg;
+ else
+ return "unicode";
+ break;
+ }
+
case 'O': /* object */
{
PyTypeObject *type;