static PyObject *rbuf_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw)
{
- char *p, *q;
- Py_ssize_t n;
+ struct bin in;
+ void *q;
buf_pyobj *me = 0;
static const char *const kwlist[] = { "data", 0 };
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "s#:new", KWLIST, &p, &n))
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&:new", KWLIST, convbin, &in))
goto end;
- q = xmalloc(n);
- memcpy(q, p, n);
+ q = xmalloc(in.sz);
+ memcpy(q, in.p, in.sz);
me = (buf_pyobj *)ty->tp_alloc(ty, 0);
me->sub = 0;
- buf_init(&me->b, q, n);
+ buf_init(&me->b, q, in.sz);
end:
return ((PyObject *)me);
}
};
static const PyTypeObject rbuf_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"ReadBuffer", /* @tp_name@ */
sizeof(buf_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
static PyObject *wbmeth_put(PyObject *me, PyObject *arg)
{
- void *p;
- Py_ssize_t n;
- if (!PyArg_ParseTuple(arg, "s#:put", &p, &n)) return (0);
- ensure(me, n);
- buf_put(BUF_B(me), p, n); assert(BOK(BUF_B(me)));
+ struct bin in;
+ if (!PyArg_ParseTuple(arg, "O&:put", convbin, &in)) return (0);
+ ensure(me, in.sz);
+ buf_put(BUF_B(me), in.p, in.sz); assert(BOK(BUF_B(me)));
RETURN_ME;
}
#define WBMETH_PUTBLK_(n, W, w) \
static PyObject *wbmeth_putblk##w(PyObject *me, PyObject *arg) \
{ \
- char *p; \
- Py_ssize_t sz; \
- if (!PyArg_ParseTuple(arg, "s#:putblk" #w, &p, &sz)) goto end; \
- if (MASK##W && sz > MASK##W) VALERR("too large"); \
- ensure(me, sz + SZ_##n); \
- buf_putmem##w(BUF_B(me), p, sz); assert(BOK(BUF_B(me))); \
+ struct bin in; \
+ if (!PyArg_ParseTuple(arg, "O&:putblk" #w, convbin, &in)) goto end; \
+ if (MASK##W && in.sz > MASK##W) VALERR("too large"); \
+ ensure(me, in.sz + SZ_##n); \
+ buf_putmem##w(BUF_B(me), in.p, in.sz); assert(BOK(BUF_B(me))); \
RETURN_ME; \
end: \
return (0); \
};
static const PyTypeObject wbuf_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"WriteBuffer", /* @tp_name@ */
sizeof(buf_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */