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);
}
}
#define RBMETH_GETU_(n, W, w) \
- static PyObject *rbmeth_getu##w(PyObject *me, PyObject *arg) \
+ static PyObject *rbmeth_getu##w(PyObject *me) \
{ \
uint##n x; \
- if (!PyArg_ParseTuple(arg, ":getu" #w)) goto end; \
if (buf_getu##w(BUF_B(me), &x)) BUFERR("buffer exhausted"); \
if (MASK##W <= ULONG_MAX) return (getulong(x)); \
else { kludge64 y; ASSIGN64(y, x); return (getk64(y)); } \
DOUINTCONV(RBMETH_GETU_)
#define RBMETH_GETBLK_(n, W, w) \
- static PyObject *rbmeth_getblk##w(PyObject *me, PyObject *arg) \
+ static PyObject *rbmeth_getblk##w(PyObject *me) \
{ \
size_t sz; \
char *q; \
- if (!PyArg_ParseTuple(arg, ":getblk" #w)) goto end; \
if ((q = buf_getmem##w(BUF_B(me), &sz)) == 0) \
BUFERR("buffer exhausted"); \
return (bytestring_pywrap(q, sz)); \
BUF_DOSUFFIXES(RBMETH_GETBLK_)
#define RBMETH_GETBUF_(n, W, w) \
- static PyObject *rbmeth_getbuf##w(PyObject *me, PyObject *arg) \
+ static PyObject *rbmeth_getbuf##w(PyObject *me) \
{ \
buf_pyobj *b; \
buf bb; \
- if (!PyArg_ParseTuple(arg, ":getbuf" #w)) goto end; \
if (buf_getbuf##w(BUF_B(me), &bb)) BUFERR("buffer exhausted"); \
b = PyObject_NEW(buf_pyobj, rbuf_pytype); \
b->b = bb; \
}
BUF_DOSUFFIXES(RBMETH_GETBUF_)
-static PyObject *rbmeth_getmp(PyObject *me, PyObject *arg)
+static PyObject *rbmeth_getmp(PyObject *me)
{
mp *x;
- if (!PyArg_ParseTuple(arg, ":getmp")) goto end;
if ((x = buf_getmp(BUF_B(me))) == 0) BUFERR("buffer exhausted");
return (mp_pywrap(x));
end:
return (0);
}
-static PyObject *rbmeth_getgf(PyObject *me, PyObject *arg)
+static PyObject *rbmeth_getgf(PyObject *me)
{
mp *x;
- if (!PyArg_ParseTuple(arg, ":getgf")) goto end;
if ((x = buf_getmp(BUF_B(me))) == 0) BUFERR("buffer exhausted");
return (gf_pywrap(x));
end:
return (-1);
}
-static PyGetSetDef rbuf_pygetset[] = {
+static const PyGetSetDef rbuf_pygetset[] = {
#define GETSETNAME(op, name) rb##op##_##name
GET (size, "RBUF.size -> SIZE")
GET (left, "RBUF.left -> REMAINDER")
{ 0 }
};
-static PyMethodDef rbuf_pymethods[] = {
+static const PyMethodDef rbuf_pymethods[] = {
#define METHNAME(func) rbmeth_##func
METH (skip, "RBUF.skip(N)")
METH (get, "RBUF.get(N) -> BYTES")
#define RBMETH_DECL_GETU_(n, W, w) \
- METH(getu##w, "RBUF.getu" #w "() -> INT")
+ NAMETH(getu##w, "RBUF.getu" #w "() -> INT")
DOUINTCONV(RBMETH_DECL_GETU_)
#define RBMETH_DECL_GETBLK_(n, W, w) \
- METH(getblk##w, "RBUF.getblk" #w "() -> BYTES")
+ NAMETH(getblk##w, "RBUF.getblk" #w "() -> BYTES")
BUF_DOSUFFIXES(RBMETH_DECL_GETBLK_)
#define RBMETH_DECL_GETBUF_(n, W, w) \
- METH(getbuf##w, "RBUF.getbuf" #w "() -> RBUF'")
+ NAMETH(getbuf##w, "RBUF.getbuf" #w "() -> RBUF'")
BUF_DOSUFFIXES(RBMETH_DECL_GETBUF_)
- METH (getmp, "RBUF.getmp() -> X")
- METH (getgf, "RBUF.getgf() -> X")
+ NAMETH(getmp, "RBUF.getmp() -> X")
+ NAMETH(getgf, "RBUF.getgf() -> X")
KWMETH(getecpt, "RBUF.getecpt([curve = None]) -> P")
METH (getecptraw, "RBUF.getecptraw(CURVE) -> P")
METH (getge, "RBUF.getge(GROUP) -> X")
{ 0 }
};
-static PyBufferProcs rbuf_pybuffer = {
+static const PyBufferProcs rbuf_pybuffer = {
rbuf_pyreadbuf, /* @bf_getreadbuffer@ */
0, /* @bf_getwritebuffer@ */
rbuf_pysegcount, /* @bf_getsegcount@ */
0 /* @bf_getcharbuffer@ */
};
-static PyTypeObject rbuf_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+static const PyTypeObject rbuf_pytype_skel = {
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"ReadBuffer", /* @tp_name@ */
sizeof(buf_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
0, /* @tp_str@ */
0, /* @tp_getattro@ */
0, /* @tp_setattro@ */
- &rbuf_pybuffer, /* @tp_as_buffer@ */
+ PYBUFFER(rbuf), /* @tp_as_buffer@ */
Py_TPFLAGS_DEFAULT | /* @tp_flags@ */
Py_TPFLAGS_BASETYPE,
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
0, /* @tp_iternext@ */
- rbuf_pymethods, /* @tp_methods@ */
+ PYMETHODS(rbuf), /* @tp_methods@ */
0, /* @tp_members@ */
- rbuf_pygetset, /* @tp_getset@ */
+ PYGETSET(rbuf), /* @tp_getset@ */
0, /* @tp_base@ */
0, /* @tp_dict@ */
0, /* @tp_descr_get@ */
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 PyObject *wbget_contents(PyObject *me, void *hunoz)
{ return (bytestring_pywrap(BBASE(BUF_B(me)), BLEN(BUF_B(me)))); }
-static PyGetSetDef wbuf_pygetset[] = {
+static const PyGetSetDef wbuf_pygetset[] = {
#define GETSETNAME(op, name) wb##op##_##name
GET (size, "WBUF.size -> SIZE")
GET (contents, "WBUF.contents -> STR")
{ 0 }
};
-static PyMethodDef wbuf_pymethods[] = {
+static const PyMethodDef wbuf_pymethods[] = {
#define METHNAME(func) wbmeth_##func
METH (zero, "WBUF.zero(N)")
METH (put, "WBUF.put(BYTES)")
{ 0 }
};
-static PyBufferProcs wbuf_pybuffer = {
+static const PyBufferProcs wbuf_pybuffer = {
wbuf_pyreadbuf, /* @bf_getreadbuffer@ */
0, /* @bf_getwritebuffer@ */
wbuf_pysegcount, /* @bf_getsegcount@ */
0 /* @bf_getcharbuffer@ */
};
-static PyTypeObject wbuf_pytype_skel = {
- PyObject_HEAD_INIT(0) 0, /* Header */
+static const PyTypeObject wbuf_pytype_skel = {
+ PyVarObject_HEAD_INIT(0, 0) /* Header */
"WriteBuffer", /* @tp_name@ */
sizeof(buf_pyobj), /* @tp_basicsize@ */
0, /* @tp_itemsize@ */
0, /* @tp_str@ */
0, /* @tp_getattro@ */
0, /* @tp_setattro@ */
- &wbuf_pybuffer, /* @tp_as_buffer@ */
+ PYBUFFER(wbuf), /* @tp_as_buffer@ */
Py_TPFLAGS_DEFAULT | /* @tp_flags@ */
Py_TPFLAGS_BASETYPE,
0, /* @tp_weaklistoffset@ */
0, /* @tp_iter@ */
0, /* @tp_iternext@ */
- wbuf_pymethods, /* @tp_methods@ */
+ PYMETHODS(wbuf), /* @tp_methods@ */
0, /* @tp_members@ */
- wbuf_pygetset, /* @tp_getset@ */
+ PYGETSET(wbuf), /* @tp_getset@ */
0, /* @tp_base@ */
0, /* @tp_dict@ */
0, /* @tp_descr_get@ */