X-Git-Url: https://git.distorted.org.uk/~mdw/pyke/blobdiff_plain/747ddb1b97d37fd57efae3c99c2bd188a14df308..7e18a150da6ebba51ca22fbe65f12c023def4b13:/pyke.c diff --git a/pyke.c b/pyke.c index f19c9e4..d874763 100644 --- a/pyke.c +++ b/pyke.c @@ -101,6 +101,25 @@ end: return (0); } +int convbin(PyObject *o, void *pp) +{ + struct bin *r = pp; + + if (PyString_Check(o)) { + r->p = PyString_AS_STRING(o); + r->sz = PyString_GET_SIZE(o); + return (1); + } + if (PyUnicode_Check(o)) { + o = _PyUnicode_AsDefaultEncodedString(o, 0); + if (!o) return (0); + r->p = PyString_AS_STRING(o); + r->sz = PyString_GET_SIZE(o); + return (1); + } + return (PyObject_AsReadBuffer(o, &r->p, &r->sz) ? 0 : 1); +} + /*----- Miscellaneous utilities -------------------------------------------*/ PyObject *abstract_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw) @@ -237,6 +256,7 @@ void *newtype(PyTypeObject *metaty, ty->ht_name = PyString_FromString(ty->ht_type.tp_name); if (ty->ht_name) ty->ht_type.tp_name = PyString_AS_STRING(ty->ht_name); + ty->ht_slots = 0; (void)PyObject_INIT(&ty->ht_type, metaty); Py_INCREF(metaty); return (ty);