*/
int pat_ref_gen_delete(struct pat_ref *ref, unsigned int gen_id, const char *key)
{
- struct pat_ref_elt *elt;
+ struct pat_ref_elt *elt, *next;
int found = 0;
/* delete pattern from reference */
- for (elt = cebs_item_lookup(&ref->ceb_root, node, pattern, key, struct pat_ref_elt);
- elt; elt = cebs_item_next_dup(&ref->ceb_root, node, pattern, elt)) {
+ elt = cebs_item_lookup(&ref->ceb_root, node, pattern, key, struct pat_ref_elt);
+ while (elt) {
if (elt->gen_id != gen_id)
continue;
+ next = cebs_item_next_dup(&ref->ceb_root, node, pattern, elt);
pat_ref_delete_by_ptr(ref, elt);
found = 1;
+ elt = next;
}
if (found)
gen = elt->gen_id;
else if (elt->gen_id != gen) {
/* only consider duplicate elements from the same gen! */
- goto skip;
+ continue;
}
if (!pat_ref_set_elt(ref, elt, value, &tmp_err)) {
}
found = 1;
first = 0;
- skip:
elt = cebs_item_next_dup(&ref->ceb_root, node, pattern, elt);
}