[Checkins] SVN: BTrees/branches/py3k/ Get bucket's __repr__ working in C extension under Py3k.
Tres Seaver
cvs-admin at zope.org
Fri Dec 14 22:37:20 UTC 2012
Log message for revision 128672:
Get bucket's __repr__ working in C extension under Py3k.
Changed:
_U BTrees/branches/py3k/
U BTrees/branches/py3k/BTrees/BucketTemplate.c
-=-
Modified: BTrees/branches/py3k/BTrees/BucketTemplate.c
===================================================================
--- BTrees/branches/py3k/BTrees/BucketTemplate.c 2012-12-14 22:37:19 UTC (rev 128671)
+++ BTrees/branches/py3k/BTrees/BucketTemplate.c 2012-12-14 22:37:20 UTC (rev 128672)
@@ -1808,6 +1808,9 @@
bucket_repr(Bucket *self)
{
PyObject *i, *r;
+#ifdef PY3K
+ PyObject *rb;
+#endif
char repr[10000];
int rv;
@@ -1822,20 +1825,34 @@
{
return NULL;
}
+#ifdef PY3K
+ rb = PyUnicode_AsLatin1String(r);
rv = PyOS_snprintf(repr, sizeof(repr),
"%s(%s)", Py_TYPE(self)->tp_name,
+ PyBytes_AsString(rb));
+ Py_DECREF(rb);
+#else
+ rv = PyOS_snprintf(repr, sizeof(repr),
+ "%s(%s)", Py_TYPE(self)->tp_name,
PyBytes_AS_STRING(r));
+#endif
if (rv > 0 && rv < sizeof(repr))
{
Py_DECREF(r);
- return PyBytes_FromStringAndSize(repr, strlen(repr));
+#ifdef PY3K
+ return PyUnicode_DecodeLatin1(repr, sizeof(repr), "surrogateescape");
+#else
+ return PyBytes_FromStringAndSize(repr, sizeof(repr));
+#endif
}
else
{
/* The static buffer wasn't big enough */
int size;
PyObject *s;
-
+#ifdef PY3K
+ PyObject *result;
+#endif
/* 3 for the parens and the null byte */
size = strlen(Py_TYPE(self)->tp_name) + PyBytes_GET_SIZE(r) + 3;
s = PyBytes_FromStringAndSize(NULL, size);
@@ -1846,7 +1863,13 @@
PyOS_snprintf(PyBytes_AS_STRING(s), size,
"%s(%s)", Py_TYPE(self)->tp_name, PyBytes_AS_STRING(r));
Py_DECREF(r);
+#ifdef PY3K
+ result = PyUnicode_FromEncodedObject(s, "latin1", "surrogateescape");
+ Py_DECREF(s);
+ return result;
+#else
return s;
+#endif
}
}
More information about the checkins
mailing list