69 lines
2.0 KiB
Diff
69 lines
2.0 KiB
Diff
|
--- lib/rpmdb.c.orig 2020-11-27 13:09:17.968992873 +0000
|
||
|
+++ lib/rpmdb.c 2020-11-27 13:14:21.524165780 +0000
|
||
|
@@ -2679,6 +2679,48 @@ int rpmdbCtrl(rpmdb db, rpmdbCtrlOp ctrl
|
||
|
return dbctrl ? dbCtrl(db, dbctrl) : 1;
|
||
|
}
|
||
|
|
||
|
+const unsigned char *rpmdbNextIteratorHeaderBlob(rpmdbMatchIterator mi, unsigned int *size)
|
||
|
+{
|
||
|
+ dbiIndex dbi = NULL;
|
||
|
+ unsigned char * uh;
|
||
|
+ unsigned int uhlen;
|
||
|
+ int rc;
|
||
|
+ if (mi == NULL || mi->mi_re != NULL)
|
||
|
+ return NULL;
|
||
|
+ if (pkgdbOpen(mi->mi_db, 0, &dbi))
|
||
|
+ return NULL;
|
||
|
+ if (mi->mi_dbc == NULL)
|
||
|
+ mi->mi_dbc = dbiCursorInit(dbi, mi->mi_cflags);
|
||
|
+ miFreeHeader(mi, dbi);
|
||
|
+ uh = NULL;
|
||
|
+ uhlen = 0;
|
||
|
+ do {
|
||
|
+ if (mi->mi_set) {
|
||
|
+ if (!(mi->mi_setx < mi->mi_set->count))
|
||
|
+ return NULL;
|
||
|
+ mi->mi_offset = dbiIndexRecordOffset(mi->mi_set, mi->mi_setx);
|
||
|
+ mi->mi_filenum = dbiIndexRecordFileNumber(mi->mi_set, mi->mi_setx);
|
||
|
+ } else {
|
||
|
+ rc = pkgdbGet(dbi, mi->mi_dbc, 0, &uh, &uhlen);
|
||
|
+ if (rc == 0)
|
||
|
+ mi->mi_offset = pkgdbKey(dbi, mi->mi_dbc);
|
||
|
+
|
||
|
+ /* Terminate on error or end of keys */
|
||
|
+ if (rc || (mi->mi_setx && mi->mi_offset == 0))
|
||
|
+ return NULL;
|
||
|
+ }
|
||
|
+ mi->mi_setx++;
|
||
|
+ } while (mi->mi_offset == 0);
|
||
|
+ if (uh == NULL) {
|
||
|
+ rc = pkgdbGet(dbi, mi->mi_dbc, mi->mi_offset, &uh, &uhlen);
|
||
|
+ if (rc || uh == NULL)
|
||
|
+ return NULL;
|
||
|
+ }
|
||
|
+ if (size)
|
||
|
+ *size = uhlen;
|
||
|
+ return uh;
|
||
|
+}
|
||
|
+
|
||
|
char *rpmdbCookie(rpmdb db)
|
||
|
{
|
||
|
void *cookie = NULL;
|
||
|
--- include/rpm/rpmdb.h.orig 2020-11-27 13:09:17.968992873 +0000
|
||
|
+++ include/rpm/rpmdb.h 2020-11-27 13:09:36.352942782 +0000
|
||
|
@@ -253,6 +253,14 @@ int rpmdbStat(const char *prefix, struct
|
||
|
*/
|
||
|
int rpmdbFStat(rpmdb db, struct stat *statbuf);
|
||
|
|
||
|
+/** \ingroup rpmdb
|
||
|
+ * Return next unverified package header blob from iteration.
|
||
|
+ * @param mi rpm database iterator
|
||
|
+ * @retval size header blob size in bytes
|
||
|
+ * @return NULL on end of iteration.
|
||
|
+ */
|
||
|
+const unsigned char *rpmdbNextIteratorHeaderBlob(rpmdbMatchIterator mi, unsigned int *size);
|
||
|
+
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|