-extern void *rpm_byrpmdbid(Id rpmdbid, const char *rootdir, void **statep);
-extern void *rpm_byfp(FILE *fp, const char *name, void **statep);
-extern void *rpm_byrpmh(struct headerToken_s *h, void **statep);
-extern int rpm_installedrpmdbids(const char *rootdir, const char *index, const char *match, Queue *rpmdbidq);
+/* create and free internal state, rootdir is the rootdir of the rpm database */
+extern void *rpm_state_create(Pool *pool, const char *rootdir);
+extern void *rpm_state_free(void *rpmstate);
+
+/* return all matching rpmdbids */
+extern int rpm_installedrpmdbids(void *rpmstate, const char *index, const char *match, Queue *rpmdbidq);
+
+/* return handles to a rpm header */
+extern void *rpm_byrpmdbid(void *rpmstate, Id rpmdbid);
+extern void *rpm_byfp(void *rpmstate, FILE *fp, const char *name);
+extern void *rpm_byrpmh(void *rpmstate, struct headerToken_s *h);
+
+/* operations on a rpm header handle */
+
+struct filelistinfo {
+ unsigned int dirlen;
+ unsigned int diridx;
+ const char *digest;
+ unsigned int mode;
+ unsigned int color;
+};