Coverage Report

Created: 2025-07-18 07:03

/src/bind9/lib/dns/dbiterator.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
3
 *
4
 * SPDX-License-Identifier: MPL-2.0
5
 *
6
 * This Source Code Form is subject to the terms of the Mozilla Public
7
 * License, v. 2.0. If a copy of the MPL was not distributed with this
8
 * file, you can obtain one at https://mozilla.org/MPL/2.0/.
9
 *
10
 * See the COPYRIGHT file distributed with this work for additional
11
 * information regarding copyright ownership.
12
 */
13
14
/*! \file */
15
16
#include <stdbool.h>
17
18
#include <isc/util.h>
19
20
#include <dns/dbiterator.h>
21
#include <dns/name.h>
22
23
void
24
0
dns__dbiterator_destroy(dns_dbiterator_t **iteratorp DNS__DB_FLARG) {
25
0
  REQUIRE(iteratorp != NULL);
26
0
  REQUIRE(DNS_DBITERATOR_VALID(*iteratorp));
27
28
0
  (*iteratorp)->methods->destroy(iteratorp DNS__DB_FLARG_PASS);
29
30
0
  ENSURE(*iteratorp == NULL);
31
0
}
32
33
isc_result_t
34
0
dns__dbiterator_first(dns_dbiterator_t *iterator DNS__DB_FLARG) {
35
0
  REQUIRE(DNS_DBITERATOR_VALID(iterator));
36
37
0
  isc_result_t result =
38
0
    iterator->methods->first(iterator DNS__DB_FLARG_PASS);
39
0
  ENSURE(result == ISC_R_SUCCESS || result == ISC_R_NOMORE);
40
0
  return result;
41
0
}
42
43
isc_result_t
44
0
dns__dbiterator_last(dns_dbiterator_t *iterator DNS__DB_FLARG) {
45
0
  REQUIRE(DNS_DBITERATOR_VALID(iterator));
46
47
0
  isc_result_t result =
48
0
    iterator->methods->last(iterator DNS__DB_FLARG_PASS);
49
0
  ENSURE(result == ISC_R_SUCCESS || result == ISC_R_NOMORE);
50
0
  return result;
51
0
}
52
53
isc_result_t
54
dns__dbiterator_seek(dns_dbiterator_t *iterator,
55
0
         const dns_name_t *name DNS__DB_FLARG) {
56
0
  REQUIRE(DNS_DBITERATOR_VALID(iterator));
57
58
0
  return iterator->methods->seek(iterator, name DNS__DB_FLARG_PASS);
59
0
}
60
61
isc_result_t
62
0
dns__dbiterator_prev(dns_dbiterator_t *iterator DNS__DB_FLARG) {
63
0
  REQUIRE(DNS_DBITERATOR_VALID(iterator));
64
65
0
  isc_result_t result =
66
0
    iterator->methods->prev(iterator DNS__DB_FLARG_PASS);
67
0
  ENSURE(result == ISC_R_SUCCESS || result == ISC_R_NOMORE);
68
0
  return result;
69
0
}
70
71
isc_result_t
72
0
dns__dbiterator_next(dns_dbiterator_t *iterator DNS__DB_FLARG) {
73
0
  REQUIRE(DNS_DBITERATOR_VALID(iterator));
74
75
0
  isc_result_t result =
76
0
    iterator->methods->next(iterator DNS__DB_FLARG_PASS);
77
0
  ENSURE(result == ISC_R_SUCCESS || result == ISC_R_NOMORE);
78
0
  return result;
79
0
}
80
81
isc_result_t
82
dns__dbiterator_current(dns_dbiterator_t *iterator, dns_dbnode_t **nodep,
83
0
      dns_name_t *name DNS__DB_FLARG) {
84
0
  REQUIRE(DNS_DBITERATOR_VALID(iterator));
85
0
  REQUIRE(nodep != NULL && *nodep == NULL);
86
0
  REQUIRE(name == NULL || dns_name_hasbuffer(name));
87
88
0
  return iterator->methods->current(iterator, nodep,
89
0
            name DNS__DB_FLARG_PASS);
90
0
}
91
92
isc_result_t
93
0
dns_dbiterator_pause(dns_dbiterator_t *iterator) {
94
0
  REQUIRE(DNS_DBITERATOR_VALID(iterator));
95
96
0
  return iterator->methods->pause(iterator);
97
0
}
98
99
isc_result_t
100
0
dns_dbiterator_origin(dns_dbiterator_t *iterator, dns_name_t *name) {
101
0
  REQUIRE(DNS_DBITERATOR_VALID(iterator));
102
0
  REQUIRE(iterator->relative_names);
103
0
  REQUIRE(dns_name_hasbuffer(name));
104
105
0
  return iterator->methods->origin(iterator, name);
106
0
}