#include "rpmsystem-py.h"
#include <rpm/rpmdb.h>
+#include <rpm/rpmtd.h>
+#include "rpmtd-py.h"
#include "rpmii-py.h"
#include "header-py.h"
PyObject *md_dict; /*!< to look like PyModuleObject */
PyObject *ref; /* for db/ts refcounting */
rpmdbIndexIterator ii;
+ rpmtd keytd;
};
static PyObject *
rpmii_iternext(rpmiiObject * s)
{
- char * key;
- size_t keylen;
- if (s->ii == NULL || (rpmdbIndexIteratorNext(s->ii, (const void**)&key, &keylen)) != 0) {
- s->ii = rpmdbIndexIteratorFree(s->ii);
- return NULL;
+ PyObject *keyo = NULL;
+
+ if (s->ii != NULL) {
+ if (rpmdbIndexIteratorNextTd(s->ii, s->keytd) == 0) {
+ /* The keys must never be arrays so rpmtd_AsPyObj() wont work */
+ keyo = rpmtd_ItemAsPyobj(s->keytd, rpmtdClass(s->keytd));
+ rpmtdFreeData(s->keytd);
+ } else {
+ s->ii = rpmdbIndexIteratorFree(s->ii);
+ }
}
- return PyBytes_FromStringAndSize(key, keylen);
+
+ return keyo;
};
static PyObject *
static void rpmii_dealloc(rpmiiObject * s)
{
s->ii = rpmdbIndexIteratorFree(s->ii);
+ rpmtdFree(s->keytd);
Py_DECREF(s->ref);
Py_TYPE(s)->tp_free((PyObject *)s);
}
0, /* nb_add */
0, /* nb_subtract */
0, /* nb_multiply */
+#if PY_MAJOR_VERSION < 3
0, /* nb_divide */
+#endif
0, /* nb_remainder */
0, /* nb_divmod */
0, /* nb_power */
iio->ii = ii;
iio->ref = s;
+ iio->keytd = rpmtdNew();
Py_INCREF(iio->ref);
return (PyObject *) iio;
}