static void pk_backend_search_db (PkBackendJob *job, alpm_db_t *db, MatchFunc match, const alpm_list_t *patterns) { PkBackend *backend = pk_backend_job_get_backend (job); PkBackendAlpmPrivate *priv = pk_backend_get_user_data (backend); const alpm_list_t *i, *j; g_return_if_fail (db != NULL); g_return_if_fail (match != NULL); /* emit packages that match all search terms */ for (i = alpm_db_get_pkgcache (db); i != NULL; i = i->next) { if (pk_backend_job_is_cancelled (job)) break; for (j = patterns; j != NULL; j = j->next) { if (!match (i->data, j->data)) break; } /* all search terms matched */ if (j == NULL) { if (db == priv->localdb) { pk_alpm_pkg_emit (job, i->data, PK_INFO_ENUM_INSTALLED); } else if (!pk_alpm_pkg_is_local (job, i->data)) { pk_alpm_pkg_emit (job, i->data, PK_INFO_ENUM_AVAILABLE); } } } }
static void pk_backend_search_db (PkBackendJob *job, alpm_db_t *db, MatchFunc match, const alpm_list_t *patterns, PkBitfield filters) { PkBackend *backend = pk_backend_job_get_backend (job); PkBackendAlpmPrivate *priv = pk_backend_get_user_data (backend); const alpm_list_t *i, *j; g_return_if_fail (db != NULL); g_return_if_fail (match != NULL); /* emit packages that match all search terms */ for (i = alpm_db_get_pkgcache (db); i != NULL; i = i->next) { if (pk_backend_job_is_cancelled (job)) break; for (j = patterns; j != NULL; j = j->next) { if (!match (i->data, j->data)) break; } /* not all search terms matched */ if (j != NULL) continue; /* want applications */ if (pk_bitfield_contain (filters, PK_FILTER_ENUM_APPLICATION) && !pk_alpm_search_is_application (i->data)) continue; /* don't want applications */ if (pk_bitfield_contain (filters, PK_FILTER_ENUM_NOT_APPLICATION) && pk_alpm_search_is_application (i->data)) continue; if (db == priv->localdb) { pk_alpm_pkg_emit (job, i->data, PK_INFO_ENUM_INSTALLED); } else if (!pk_alpm_pkg_is_local (job, i->data)) { pk_alpm_pkg_emit (job, i->data, PK_INFO_ENUM_AVAILABLE); } } }