int convbin(PyObject *o, void *pp)
{
struct bin *r = pp;
+ int rc;
if (BIN_CHECK(o)) {
+ r->vw.obj = 0;
r->p = BIN_PTR(o);
r->sz = BIN_LEN(o);
return (1);
if (PyUnicode_Check(o)) {
o = _PyUnicode_AsDefaultEncodedString(o, 0);
if (!o) return (0);
+ r->vw.obj = 0;
r->p = PyString_AS_STRING(o);
r->sz = PyString_GET_SIZE(o);
return (1);
}
#endif
+#if PY_VERSION_HEX < 0x02060000
+ r->vw.buf = 0;
return (PyObject_AsReadBuffer(o, &r->p, &r->sz) ? 0 : 1);
+#else
+ rc = PyObject_GetBuffer(o, &r->vw, PyBUF_SIMPLE); if (rc) return (0);
+ o->p = o->vw.buf; o->sz = o->vw.len;
+ return (1);
+#endif
}
+void freebin(struct bin *r)
+ { if (r->vw.obj) PyBuffer_Release(&r->vw); }
+
/*----- Miscellaneous utilities -------------------------------------------*/
PyObject *abstract_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)