py-api utf8/filepaths:
in function PyC_UnicodeAsByte(), replace code copied from python with PyUnicode_EncodeFSDefault(), new in py3.2.
This commit is contained in:
@@ -212,29 +212,7 @@ const char *PyC_UnicodeAsByte(PyObject *py_str, PyObject **coerce)
|
||||
return PyBytes_AS_STRING(py_str);
|
||||
}
|
||||
else {
|
||||
/* mostly copied from fileio.c's, fileio_init */
|
||||
PyObject *stringobj;
|
||||
PyObject *u;
|
||||
|
||||
PyErr_Clear();
|
||||
|
||||
u= PyUnicode_FromObject(py_str); /* coerce into unicode */
|
||||
|
||||
if (u == NULL)
|
||||
return NULL;
|
||||
|
||||
stringobj= PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(u), PyUnicode_GET_SIZE(u), "surrogateescape");
|
||||
Py_DECREF(u);
|
||||
if (stringobj == NULL)
|
||||
return NULL;
|
||||
if (!PyBytes_Check(stringobj)) { /* this seems wrong but it works fine */
|
||||
// printf("encoder failed to return bytes\n");
|
||||
Py_DECREF(stringobj);
|
||||
return NULL;
|
||||
}
|
||||
*coerce= stringobj;
|
||||
|
||||
return PyBytes_AS_STRING(stringobj);
|
||||
return PyBytes_AS_STRING((*coerce= PyUnicode_EncodeFSDefault(py_str)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user