X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb-python/blobdiff_plain/ae5cafdbfe349f25afdc289ab79a6b32d47f2213..11cb3d97caae1888a6d6ae63ff6e2dea9f7cce01:/key.c?ds=sidebyside diff --git a/key.c b/key.c index 38d3024..0694b2c 100644 --- a/key.c +++ b/key.c @@ -499,7 +499,7 @@ static PyTypeObject keydata_pytype_skel = { 0, /* @tp_richcompare@ */ 0, /* @tp_weaklistoffset@ */ 0, /* @tp_iter@ */ - 0, /* @tp_iternexr@ */ + 0, /* @tp_iternext@ */ keydata_pymethods, /* @tp_methods@ */ 0, /* @tp_members@ */ keydata_pygetset, /* @tp_getset@ */ @@ -576,7 +576,7 @@ static PyTypeObject keydatabin_pytype_skel = { 0, /* @tp_richcompare@ */ 0, /* @tp_weaklistoffset@ */ 0, /* @tp_iter@ */ - 0, /* @tp_iternexr@ */ + 0, /* @tp_iternext@ */ 0, /* @tp_methods@ */ 0, /* @tp_members@ */ keydatabin_pygetset, /* @tp_getset@ */ @@ -713,7 +713,7 @@ static PyTypeObject keydataenc_pytype_skel = { 0, /* @tp_richcompare@ */ 0, /* @tp_weaklistoffset@ */ 0, /* @tp_iter@ */ - 0, /* @tp_iternexr@ */ + 0, /* @tp_iternext@ */ keydataenc_pymethods, /* @tp_methods@ */ 0, /* @tp_members@ */ keydataenc_pygetset, /* @tp_getset@ */ @@ -789,7 +789,7 @@ static PyTypeObject keydatamp_pytype_skel = { 0, /* @tp_richcompare@ */ 0, /* @tp_weaklistoffset@ */ 0, /* @tp_iter@ */ - 0, /* @tp_iternexr@ */ + 0, /* @tp_iternext@ */ 0, /* @tp_methods@ */ 0, /* @tp_members@ */ keydatamp_pygetset, /* @tp_getset@ */ @@ -864,7 +864,7 @@ static PyTypeObject keydatastr_pytype_skel = { 0, /* @tp_richcompare@ */ 0, /* @tp_weaklistoffset@ */ 0, /* @tp_iter@ */ - 0, /* @tp_iternexr@ */ + 0, /* @tp_iternext@ */ 0, /* @tp_methods@ */ 0, /* @tp_members@ */ keydatastr_pygetset, /* @tp_getset@ */ @@ -944,7 +944,7 @@ static PyTypeObject keydataec_pytype_skel = { 0, /* @tp_richcompare@ */ 0, /* @tp_weaklistoffset@ */ 0, /* @tp_iter@ */ - 0, /* @tp_iternexr@ */ + 0, /* @tp_iternext@ */ 0, /* @tp_methods@ */ 0, /* @tp_members@ */ keydataec_pygetset, /* @tp_getset@ */ @@ -969,7 +969,7 @@ static PyObject *subkeyiter_make(PyObject *kdobj) return ((PyObject *)me); } -static PyObject *subkeyiter_next(PyObject *me) +static PyObject *subkeyiter_pynext(PyObject *me) { const char *tag; if (!key_nextsubkey(SUBKEYITER_I(me), &tag, 0)) @@ -1015,7 +1015,7 @@ static PyTypeObject subkeyiter_pytype_skel = { 0, /* @tp_richcompare@ */ 0, /* @tp_weaklistoffset@ */ PyObject_SelfIter, /* @tp_iter@ */ - subkeyiter_next, /* @tp_iternexr@ */ + subkeyiter_pynext, /* @tp_iternext@ */ 0, /* @tp_methods@ */ 0, /* @tp_members@ */ 0, /* @tp_getset@ */ @@ -1041,7 +1041,7 @@ static PyObject *keydatastruct_pynew(PyTypeObject *ty, key_data *kd = 0; static char *kwlist[] = { "subkeys", 0 }; - Py_INCREF(arg); Py_INCREF(kw); + Py_XINCREF(arg); Py_XINCREF(kw); if (!PyArg_ParseTupleAndKeywords(arg, kw, "|O:new", kwlist, &sub)) goto end; kd = key_newstruct(); @@ -1112,9 +1112,9 @@ end: } static PyMappingMethods keydatastruct_pymapping = { - 0, /* @mp_length@ */ + gmap_pysize, /* @mp_length@ */ keydatastruct_pylookup, /* @mp_subscript@ */ - keydatastruct_pystore, /* @mp_ass_subscript@ */ + keydatastruct_pystore /* @mp_ass_subscript@ */ }; static PyTypeObject keydatastruct_pytype_skel = { @@ -1149,8 +1149,8 @@ static PyTypeObject keydatastruct_pytype_skel = { 0, /* @tp_richcompare@ */ 0, /* @tp_weaklistoffset@ */ subkeyiter_make, /* @tp_iter@ */ - 0, /* @tp_iternexr@ */ - 0, /* @tp_methods@ */ + 0, /* @tp_iternext@ */ + gmap_pymethods, /* @tp_methods@ */ 0, /* @tp_members@ */ 0, /* @tp_getset@ */ 0, /* @tp_base@ */ @@ -1178,7 +1178,7 @@ static PyObject *keyattriter_make(PyObject *kaobj) return ((PyObject *)me); } -static PyObject *keyattriter_next(PyObject *me) +static PyObject *keyattriter_pynext(PyObject *me) { const char *name; @@ -1225,7 +1225,7 @@ static PyTypeObject keyattriter_pytype_skel = { 0, /* @tp_richcompare@ */ 0, /* @tp_weaklistoffset@ */ PyObject_SelfIter, /* @tp_iter@ */ - keyattriter_next, /* @tp_iternexr@ */ + keyattriter_pynext, /* @tp_iternext@ */ 0, /* @tp_methods@ */ 0, /* @tp_members@ */ 0, /* @tp_getset@ */ @@ -1298,9 +1298,9 @@ static void keyattrs_pydealloc(PyObject *me) } static PyMappingMethods keyattrs_pymapping = { - 0, - keyattrs_pylookup, - keyattrs_pystore + gmap_pysize, /* @mp_length@ */ + keyattrs_pylookup, /* @mp_subscript@ */ + keyattrs_pystore /* @mp_ass_subscript@ */ }; static PyTypeObject keyattrs_pytype_skel = { @@ -1316,7 +1316,7 @@ static PyTypeObject keyattrs_pytype_skel = { 0, /* @tp_compare@ */ 0, /* @tp_repr@ */ 0, /* @tp_as_number@ */ - 0, /* @tp_as_sequence@ */ + &gmap_pysequence, /* @tp_as_sequence@ */ &keyattrs_pymapping, /* @tp_as_mapping@ */ 0, /* @tp_hash@ */ 0, /* @tp_call@ */ @@ -1335,8 +1335,8 @@ static PyTypeObject keyattrs_pytype_skel = { 0, /* @tp_richcompare@ */ 0, /* @tp_weaklistoffset@ */ keyattriter_make, /* @tp_iter@ */ - 0, /* @tp_iternexr@ */ - 0, /* @tp_methods@ */ + 0, /* @tp_iternext@ */ + gmap_pymethods, /* @tp_methods@ */ 0, /* @tp_members@ */ 0, /* @tp_getset@ */ 0, /* @tp_base@ */ @@ -1464,6 +1464,8 @@ static PyObject *kmeth_fingerprint(PyObject *me, static PyObject *kget_id(PyObject *me, void *hunoz) { return (getu32(KEY_K(me)->id)); } +static PyObject *kget_file(PyObject *me, void *hunoz) + { RETURN_OBJ(KEY_KFOBJ(me)); } static PyObject *kget_type(PyObject *me, void *hunoz) { return (PyString_FromString(KEY_K(me)->type)); } static PyObject *kget_exptime(PyObject *me, void *hunoz) @@ -1484,6 +1486,8 @@ static PyObject *kget_data(PyObject *me, void *hunoz) static int kset_data(PyObject *me, PyObject *x, void *hunoz) { int err; + + if (!x) NIERR("__del__"); if (!KEYDATA_PYCHECK(x)) TYERR("expected KeyData object"); if ((err = key_setkeydata(KEY_KF(me), KEY_K(me), KEYDATA_KD(x))) != 0) KEYERR(err); @@ -1513,7 +1517,7 @@ static int kset_tag(PyObject *me, PyObject *x, void *hunoz) int err; char *tag; - if (x == Py_None) tag = 0; + if (!x || x == Py_None) tag = 0; else if ((tag = PyString_AsString(x)) == 0) goto end; if ((err = key_settag(KEY_KF(me), KEY_K(me), tag)) != 0) KEYERR(err); return (0); @@ -1531,7 +1535,7 @@ static int kset_comment(PyObject *me, PyObject *x, void *hunoz) int err; char *c; - if (x == Py_None) c = 0; + if (!x || x == Py_None) c = 0; else if ((c = PyString_AsString(x)) == 0) goto end; if ((err = key_setcomment(KEY_KF(me), KEY_K(me), c)) != 0) KEYERR(err); return (0); @@ -1552,6 +1556,7 @@ static PyMethodDef key_pymethods[] = { static PyGetSetDef key_pygetset[] = { #define GETSETNAME(op, name) k##op##_##name + GET (file, "KEY.file -> KF") GET (id, "KEY.id -> ID") GETSET(tag, "KEY.tag -> TAG") GET (type, "KEY.type -> TYPE") @@ -1598,7 +1603,7 @@ static PyTypeObject key_pytype_skel = { 0, /* @tp_richcompare@ */ 0, /* @tp_weaklistoffset@ */ 0, /* @tp_iter@ */ - 0, /* @tp_iternexr@ */ + 0, /* @tp_iternext@ */ key_pymethods, /* @tp_methods@ */ 0, /* @tp_members@ */ key_pygetset, /* @tp_getset@ */ @@ -1625,7 +1630,7 @@ static PyObject *keyiter_new(PyObject *kfobj) return ((PyObject *)me); } -static PyObject *keyiter_next(PyObject *me) +static PyObject *keyiter_pynext(PyObject *me) { key *k; @@ -1672,7 +1677,7 @@ static PyTypeObject keyiter_pytype_skel = { 0, /* @tp_richcompare@ */ 0, /* @tp_weaklistoffset@ */ PyObject_SelfIter, /* @tp_iter@ */ - keyiter_next, /* @tp_iternexr@ */ + keyiter_pynext, /* @tp_iternext@ */ 0, /* @tp_methods@ */ 0, /* @tp_members@ */ 0, /* @tp_getset@ */ @@ -1973,7 +1978,7 @@ static PyTypeObject keyfile_pytype_skel = { 0, /* @tp_compare@ */ 0, /* @tp_repr@ */ 0, /* @tp_as_number@ */ - 0, /* @tp_as_sequence@ */ + &gmap_pysequence, /* @tp_as_sequence@ */ &keyfile_pymapping, /* @tp_as_mapping@ */ 0, /* @tp_hash@ */ 0, /* @tp_call@ */ @@ -1992,7 +1997,7 @@ static PyTypeObject keyfile_pytype_skel = { 0, /* @tp_richcompare@ */ 0, /* @tp_weaklistoffset@ */ keyiter_new, /* @tp_iter@ */ - 0, /* @tp_iternexr@ */ + 0, /* @tp_iternext@ */ keyfile_pymethods, /* @tp_methods@ */ 0, /* @tp_members@ */ keyfile_pygetset, /* @tp_getset@ */