*.c: Introduce a new input conversion for binary strings.
[pyke] / pyke.c
diff --git a/pyke.c b/pyke.c
index 29dd8c5..d874763 100644 (file)
--- 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)