X-Git-Url: https://git.distorted.org.uk/~mdw/pyke/blobdiff_plain/a6b5c54d053f10245f5a815045ac36a0365956f1..20ab4ff45033f7886ec4e95147cf5c98c07835e4:/util.c diff --git a/util.c b/util.c index cfd4115..6a6d26c 100644 --- a/util.c +++ b/util.c @@ -28,6 +28,8 @@ #include "catacomb-python.h" +/* #undef HAVE_LONG_LONG */ + /*----- External values ---------------------------------------------------*/ static PyObject *modname = 0; @@ -42,12 +44,17 @@ PyObject *getulong(unsigned long w) return (PyLong_FromUnsignedLong(w)); } +#ifndef HAVE_LONG_LONG static PyObject *i32 = 0; static int init_i32(void) { if (!i32 && (i32 = PyInt_FromLong(32)) == 0) return (-1); return (0); } +#endif PyObject *getk64(kludge64 u) { +#ifdef HAVE_LONG_LONG + return (PyLong_FromUnsignedLongLong(GET64(unsigned PY_LONG_LONG, u))); +#else PyObject *i = 0, *j = 0, *t; PyObject *rc = 0; @@ -63,6 +70,7 @@ end: if (i) Py_DECREF(i); if (j) Py_DECREF(j); return (rc); +#endif } PyObject *getbool(int b) @@ -146,11 +154,22 @@ end: int convk64(PyObject *o, void *pp) { - PyObject *i = 0, *t; + PyObject *i = 0; int rc = 0; +#if HAVE_LONG_LONG + unsigned PY_LONG_LONG t; +#else + PyObject *t; uint32 lo, hi; +#endif if (!o) VALERR("can't delete"); +#if HAVE_LONG_LONG + if ((i = PyNumber_Long(o)) == 0) goto end; + t = PyLong_AsUnsignedLongLong(i); + if (t == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred()) goto end; + ASSIGN64(*(kludge64 *)pp, t); +#else if (init_i32()) goto end; if ((i = PyNumber_Int(o)) == 0) goto end; lo = PyInt_AsUnsignedLongMask(i); @@ -161,7 +180,9 @@ int convk64(PyObject *o, void *pp) Py_DECREF(i); i = t; if (PyObject_IsTrue(i)) VALERR("out of range"); SET64(*(kludge64 *)pp, hi, lo); +#endif rc = 1; + end: if (i) Py_DECREF(i); return (rc); @@ -386,7 +407,7 @@ static PyTypeObject itemiter_pytype_skel = { Py_TPFLAGS_BASETYPE, /* @tp_doc@ */ -"Iterates over the items of a mapping.", +"Iterates over the keys of a mapping.", 0, /* @tp_traverse@ */ 0, /* @tp_clear@ */ @@ -444,7 +465,7 @@ static PyTypeObject valiter_pytype_skel = { Py_TPFLAGS_BASETYPE, /* @tp_doc@ */ -"Iterates over the items of a mapping.", +"Iterates over the values of a mapping.", 0, /* @tp_traverse@ */ 0, /* @tp_clear@ */