s = PyObject_Str(op);
else
s = PyObject_Repr(op);
- if (s == NULL)
+ if (s == NULL) {
ret = -1;
- else if (PyBytes_Check(s)) {
- fwrite(PyBytes_AS_STRING(s), 1,
- PyBytes_GET_SIZE(s), fp);
}
- else if (PyUnicode_Check(s)) {
- PyObject *t;
- t = PyUnicode_AsEncodedString(s, "utf-8", "backslashreplace");
+ else {
+ assert(PyUnicode_Check(s));
+ const char *t;
+ Py_ssize_t len;
+ t = PyUnicode_AsUTF8AndSize(s, &len);
if (t == NULL) {
ret = -1;
}
else {
- fwrite(PyBytes_AS_STRING(t), 1,
- PyBytes_GET_SIZE(t), fp);
- Py_DECREF(t);
+ fwrite(t, 1, len, fp);
}
+ Py_DECREF(s);
}
- else {
- PyErr_Format(PyExc_TypeError,
- "str() or repr() returned '%.100s'",
- Py_TYPE(s)->tp_name);
- ret = -1;
- }
- Py_XDECREF(s);
}
}
if (ret == 0) {