X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb-python/blobdiff_plain/3aa33042dc760937bb9da54c09f7c668f00eb241..29417b2a20751c087be45b643072e7152e6e6331:/bytestring.c diff --git a/bytestring.c b/bytestring.c index 61627f4..99c114c 100644 --- a/bytestring.c +++ b/bytestring.c @@ -1,13 +1,11 @@ /* -*-c-*- * - * $Id$ - * * Byte strings * * (c) 2004 Straylight/Edgeware */ -/*----- Licensing notice --------------------------------------------------* +/*----- Licensing notice --------------------------------------------------* * * This file is part of the Python interface to Catacomb. * @@ -15,12 +13,12 @@ * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * Catacomb/Python is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with Catacomb/Python; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. @@ -34,9 +32,9 @@ PyTypeObject *bytestring_pytype; -PyObject *bytestring_pywrap(const void *p, size_t n) +static PyObject *dowrap(PyTypeObject *ty, const void *p, size_t n) { - PyStringObject *x = PyObject_NewVar(PyStringObject, bytestring_pytype, n); + PyStringObject *x = (PyStringObject *)ty->tp_alloc(ty, n); if (p) memcpy(x->ob_sval, p, n); x->ob_sval[n] = 0; #ifdef CACHE_HASH @@ -46,8 +44,22 @@ PyObject *bytestring_pywrap(const void *p, size_t n) return ((PyObject *)x); } +PyObject *bytestring_pywrap(const void *p, size_t n) + { return (dowrap(bytestring_pytype, p, n)); } + PyObject *bytestring_pywrapbuf(buf *b) - { return bytestring_pywrap(BCUR(b), BLEFT(b)); } + { return (dowrap(bytestring_pytype, BCUR(b), BLEFT(b))); } + +static PyObject *bytestring_pynew(PyTypeObject *ty, + PyObject *arg, PyObject *kw) +{ + const char *p; + int n; + static char *kwlist[] = { "data", 0 }; + if (!PyArg_ParseTupleAndKeywords(arg, kw, "s#:new", kwlist, &p, &n)) + return (0); + return (dowrap(ty, p, n)); +} #define BINOP(name, op) \ static PyObject *bytestring_py##name(PyObject *x, PyObject *y) { \ @@ -117,8 +129,8 @@ static PyNumberMethods bytestring_pynumber = { static PyBufferProcs bytestring_pybuffer; static PyTypeObject bytestring_pytype_skel = { - PyObject_HEAD_INIT(&PyType_Type) 0, /* Header */ - "catacomb.ByteString", /* @tp_name@ */ + PyObject_HEAD_INIT(0) 0, /* Header */ + "ByteString", /* @tp_name@ */ 0, /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -149,7 +161,7 @@ static PyTypeObject bytestring_pytype_skel = { 0, /* @tp_richcompare@ */ 0, /* @tp_weaklistoffset@ */ 0, /* @tp_iter@ */ - 0, /* @tp_iternexr@ */ + 0, /* @tp_iternext@ */ 0, /* @tp_methods@ */ 0, /* @tp_members@ */ 0, /* @tp_getset@ */ @@ -160,7 +172,7 @@ static PyTypeObject bytestring_pytype_skel = { 0, /* @tp_dictoffset@ */ 0, /* @tp_init@ */ PyType_GenericAlloc, /* @tp_alloc@ */ - 0, /* @tp_new@ */ + bytestring_pynew, /* @tp_new@ */ 0, /* @tp_free@ */ 0 /* @tp_is_gc@ */ };