X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb-python/blobdiff_plain/c4ca600f0508ddec0de99aa9eb87f4f7d4cab5c5..cb46f06b084bb7574b6f7cde13bf413f58a1e91c:/buffer.c diff --git a/buffer.c b/buffer.c index 9b6e0ff..b15a245 100644 --- a/buffer.c +++ b/buffer.c @@ -53,7 +53,7 @@ static PyObject *buferr; static PyObject *rbuf_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw) { char *p, *q; - int n; + Py_ssize_t n; buf_pyobj *me = 0; static char *kwlist[] = { "data", 0 }; @@ -77,10 +77,10 @@ static void buf_pydealloc(PyObject *me) FREEOBJ(me); } -static int rbuf_pysegcount(PyObject *me, int *nn) +static Py_ssize_t rbuf_pysegcount(PyObject *me, Py_ssize_t *nn) { if (nn) *nn = BSZ(BUF_B(me)); return (1); } -static int rbuf_pyreadbuf(PyObject *me, int seg, void **q) +static Py_ssize_t rbuf_pyreadbuf(PyObject *me, Py_ssize_t seg, void **q) { assert(seg == 0); *q = BCUR(BUF_B(me)); return (BLEFT(BUF_B(me))); } static PyObject *rbmeth_skip(PyObject *me, PyObject *arg) @@ -112,7 +112,8 @@ end: uint##n x; \ if (!PyArg_ParseTuple(arg, ":getu" #w)) goto end; \ if (buf_getu##w(BUF_B(me), &x)) BUFERR(); \ - return (getulong(x)); \ + if (MASK##W <= ULONG_MAX) return (getulong(x)); \ + else { kludge64 y; ASSIGN64(y, x); return (getk64(y)); } \ end: \ return (0); \ } @@ -261,14 +262,14 @@ static PyMethodDef rbuf_pymethods[] = { METH(getu##w, "RBUF.getu" #w "() -> INT") DOUINTCONV(RBMETH_DECL_GETU_) #define RBMETH_DECL_GETBLK_(n, W, w) \ - METH(getblk##w, "RBUF.getblk" #w "() -> INT") + METH(getblk##w, "RBUF.getblk" #w "() -> BYTES") BUF_DOSUFFIXES(RBMETH_DECL_GETBLK_) #define RBMETH_DECL_GETBUF_(n, W, w) \ - METH(getbuf##w, "RBUF.getbuf" #w "() -> INT") + METH(getbuf##w, "RBUF.getbuf" #w "() -> RBUF'") BUF_DOSUFFIXES(RBMETH_DECL_GETBUF_) METH (getmp, "RBUF.getmp() -> X") METH (getgf, "RBUF.getgf() -> X") - KWMETH(getecpt, "RBUF.getecpt(curve = None) -> P") + KWMETH(getecpt, "RBUF.getecpt([curve = None]) -> P") METH (getecptraw, "RBUF.getecptraw(CURVE) -> P") METH (getge, "RBUF.getge(GROUP) -> X") METH (getgeraw, "RBUF.getgeraw(GROUP) -> X") @@ -285,7 +286,7 @@ static PyBufferProcs rbuf_pybuffer = { static PyTypeObject rbuf_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.ReadBuffer", /* @tp_name@ */ + "ReadBuffer", /* @tp_name@ */ sizeof(buf_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -367,10 +368,10 @@ end: return ((PyObject *)me); } -static int wbuf_pysegcount(PyObject *me, int *nn) +static Py_ssize_t wbuf_pysegcount(PyObject *me, Py_ssize_t *nn) { if (nn) *nn = BLEN(BUF_B(me)); return (1); } -static int wbuf_pyreadbuf(PyObject *me, int seg, void **q) +static Py_ssize_t wbuf_pyreadbuf(PyObject *me, Py_ssize_t seg, void **q) { assert(seg == 0); *q = BBASE(BUF_B(me)); return (BLEN(BUF_B(me))); } static PyObject *wbmeth_zero(PyObject *me, PyObject *arg) @@ -387,10 +388,10 @@ static PyObject *wbmeth_zero(PyObject *me, PyObject *arg) static PyObject *wbmeth_put(PyObject *me, PyObject *arg) { void *p; - int n; + 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(m))); + buf_put(BUF_B(me), p, n); assert(BOK(BUF_B(me))); RETURN_ME; } @@ -405,16 +406,20 @@ static PyObject *wbmeth_put(PyObject *me, PyObject *arg) } DOUINTCONV(WBMETH_PUTU_) +#define MASKz 0 #define SZ_z 1 #define WBMETH_PUTBLK_(n, W, w) \ static PyObject *wbmeth_putblk##w(PyObject *me, PyObject *arg) \ { \ char *p; \ - int sz; \ - if (!PyArg_ParseTuple(arg, "s#:putblk" #w, &p, &sz)) return (0); \ + 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))); \ RETURN_ME; \ + end: \ + return (0); \ } BUF_DOSUFFIXES(WBMETH_PUTBLK_) @@ -491,7 +496,7 @@ static PyGetSetDef wbuf_pygetset[] = { static PyMethodDef wbuf_pymethods[] = { #define METHNAME(func) wbmeth_##func - METH (zero, "WBUF.skip(N)") + METH (zero, "WBUF.zero(N)") METH (put, "WBUF.put(BYTES)") #define WBMETH_DECL_PUTU_(n, W, w) \ METH(putu##w, "WBUF.putu" #w "(INT)") @@ -501,7 +506,7 @@ static PyMethodDef wbuf_pymethods[] = { BUF_DOSUFFIXES(WBMETH_DECL_PUTBLK_) METH (putmp, "WBUF.putmp(X)") METH (putgf, "WBUF.putgf(X)") - KWMETH(putecpt, "WBUF.putecpt(P)") + METH (putecpt, "WBUF.putecpt(P)") METH (putecptraw, "WBUF.putecptraw(P)") METH (putge, "WBUF.putge(X)") METH (putgeraw, "WBUF.putgeraw(X)") @@ -518,7 +523,7 @@ static PyBufferProcs wbuf_pybuffer = { static PyTypeObject wbuf_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.WriteBuffer", /* @tp_name@ */ + "WriteBuffer", /* @tp_name@ */ sizeof(buf_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */