/* get the rpmdbids of all installed packages from the Name index database.
* This is much faster then querying the big Packages database */
static struct rpmdbentry *
-getinstalledrpmdbids(struct rpmdbstate *state, const char *index, const char *match, int *nentriesp, char **namedatap)
+getinstalledrpmdbids(struct rpmdbstate *state, const char *index, const char *match, int *nentriesp, char **namedatap, int keep_gpg_pubkey)
{
const void * key;
- size_t keylen;
+ size_t keylen, matchl = 0;
Id nameoff;
char *namedata = 0;
rpmdbIndexIterator ii;
int i;
+ *nentriesp = 0;
+ if (namedatap)
+ *namedatap = 0;
+
if (state->dbenvopened != 1 && !opendbenv(state))
return 0;
+ if (match)
+ matchl = strlen(match);
ii = rpmdbIndexIteratorInit(rpmtsGetRdb(state->ts), RPMDBI_NAME);
- *nentriesp = 0;
- if (namedatap)
- *namedatap = 0;
-
while (rpmdbIndexIteratorNext(ii, &key, &keylen) == 0)
{
-
- if (keylen == 10 && !memcmp(key, "gpg-pubkey", 10))
- continue;
+ if (match)
+ {
+ if (keylen != matchl || memcmp(key, match, keylen) != 0)
+ continue;
+ }
+ else if (!keep_gpg_pubkey && keylen == 10 && !memcmp(key, "gpg-pubkey", 10))
+ continue;
nameoff = namedatal;
if (namedatap)
{