Commit 1bd5f61c authored by Michał Kępień's avatar Michał Kępień
Browse files

Look for the next matching tuple in a separate function

Extract the portion of the do-while loop responsible for finding the
next tuple with the same name and type into a separate function to
improve code clarity.
parent 31cdf770
......@@ -7288,6 +7288,26 @@ need_nsec_chain(dns_db_t *db, dns_dbversion_t *ver,
return (result);
}
/*%
* Given a tuple which is part of a diff, return a pointer to the next tuple in
* that diff which has the same name and type (or NULL if no such tuple is
* found).
*/
static dns_difftuple_t *
find_next_matching_tuple(dns_difftuple_t *cur) {
dns_difftuple_t *next = cur;
while ((next = ISC_LIST_NEXT(next, link)) != NULL) {
if (cur->rdata.type == next->rdata.type &&
dns_name_equal(&cur->name, &next->name))
{
return (next);
}
}
return (NULL);
}
/*%
* Remove all tuples with the same name and type as 'cur' from 'src' and append
* them to 'dst'.
......@@ -7295,11 +7315,7 @@ need_nsec_chain(dns_db_t *db, dns_dbversion_t *ver,
static void
move_matching_tuples(dns_difftuple_t *cur, dns_diff_t *src, dns_diff_t *dst) {
do {
dns_difftuple_t *next = ISC_LIST_NEXT(cur, link);
while (next != NULL &&
(cur->rdata.type != next->rdata.type ||
!dns_name_equal(&cur->name, &next->name)))
next = ISC_LIST_NEXT(next, link);
dns_difftuple_t *next = find_next_matching_tuple(cur);
ISC_LIST_UNLINK(src->tuples, cur, link);
dns_diff_appendminimal(dst, &cur);
INSIST(cur == NULL);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment