static GBytes * lookup_or_create_assertion_key (GkmAssertion *assertion) { GBytes *key; key = lookup_assertion_key (assertion); if (key == NULL) { key = create_assertion_key (gkm_assertion_get_purpose (assertion), gkm_assertion_get_peer (assertion)); g_object_set_qdata_full (G_OBJECT (assertion), QDATA_ASSERTION_KEY, key, (GDestroyNotify)g_bytes_unref); } return key; }
void gkm_xdg_trust_remove_assertion (GkmXdgTrust *self, GkmAssertion *assertion, GkmTransaction *transaction) { GBytes *key; g_return_if_fail (GKM_XDG_IS_TRUST (self)); g_return_if_fail (GKM_IS_ASSERTION (assertion)); g_return_if_fail (!transaction || GKM_IS_TRANSACTION (transaction)); key = lookup_assertion_key (assertion); g_return_if_fail (key); /* Assertion needs to be from this trust object */ g_return_if_fail (g_hash_table_lookup (self->pv->assertions, key) == assertion); remove_assertion_from_trust (self, assertion, transaction); }
static void remove_assertion_from_trust (GkmXdgTrust *self, GkmAssertion *assertion, GkmTransaction *transaction) { GByteArray *key; key = lookup_assertion_key (assertion); g_assert (key); gkm_object_expose (GKM_OBJECT (assertion), FALSE); if (transaction == NULL) { if (!g_hash_table_remove (self->pv->assertions, key)) g_return_if_reached (); } else { if (!g_hash_table_steal (self->pv->assertions, key)) g_return_if_reached (); gkm_transaction_add (transaction, self, complete_remove_assertion, assertion); } }