Replaced more complex iterator usages.

This commit is contained in:
Tobias Brunner
2011-07-06 09:43:45 +02:00
parent 67405ce808
commit 47daa0e6fe
4 changed files with 46 additions and 72 deletions
+9 -14
View File
@@ -628,35 +628,30 @@ static linked_list_t* create_unique_cert_list(certificate_type_t type)
while (enumerator->enumerate(enumerator, (void**)&cert))
{
iterator_t *iterator = list->create_iterator(list, TRUE);
enumerator_t *added = list->create_enumerator(list);
identification_t *issuer = cert->get_issuer(cert);
bool previous_same, same = FALSE, last = TRUE;
bool previous_same, same = FALSE, found = FALSE;
certificate_t *list_cert;
while (iterator->iterate(iterator, (void**)&list_cert))
while (added->enumerate(added, (void**)&list_cert))
{
/* exit if we have a duplicate? */
if (list_cert->equals(list_cert, cert))
{
last = FALSE;
{ /* stop if we found a duplicate*/
found = TRUE;
break;
}
/* group certificates with same issuer */
previous_same = same;
same = list_cert->has_issuer(list_cert, issuer);
if (previous_same && !same)
{
iterator->insert_before(iterator, (void *)cert->get_ref(cert));
last = FALSE;
{ /* group certificates with same issuer */
break;
}
}
iterator->destroy(iterator);
if (last)
if (!found)
{
list->insert_last(list, (void *)cert->get_ref(cert));
list->insert_before(list, added, cert->get_ref(cert));
}
added->destroy(added);
}
enumerator->destroy(enumerator);
return list;