Coverage Report

Created: 2023-06-07 06:23

/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
  /*
26
   * Destroy '*iteratorp'.
27
   */
28
29
0
  REQUIRE(iteratorp != NULL);
30
0
  REQUIRE(DNS_DBITERATOR_VALID(*iteratorp));
31
32
0
  (*iteratorp)->methods->destroy(iteratorp DNS__DB_FLARG_PASS);
33
34
0
  ENSURE(*iteratorp == NULL);
35
0
}
36
37
isc_result_t
38
0
dns__dbiterator_first(dns_dbiterator_t *iterator DNS__DB_FLARG) {
39
  /*
40
   * Move the node cursor to the first node in the database (if any).
41
   */
42
43
0
  REQUIRE(DNS_DBITERATOR_VALID(iterator));
44
45
0
  return (iterator->methods->first(iterator DNS__DB_FLARG_PASS));
46
0
}
47
48
isc_result_t
49
0
dns__dbiterator_last(dns_dbiterator_t *iterator DNS__DB_FLARG) {
50
  /*
51
   * Move the node cursor to the first node in the database (if any).
52
   */
53
54
0
  REQUIRE(DNS_DBITERATOR_VALID(iterator));
55
56
0
  return (iterator->methods->last(iterator DNS__DB_FLARG_PASS));
57
0
}
58
59
isc_result_t
60
dns__dbiterator_seek(dns_dbiterator_t *iterator,
61
0
         const dns_name_t *name DNS__DB_FLARG) {
62
  /*
63
   * Move the node cursor to the node with name 'name'.
64
   */
65
66
0
  REQUIRE(DNS_DBITERATOR_VALID(iterator));
67
68
0
  return (iterator->methods->seek(iterator, name DNS__DB_FLARG_PASS));
69
0
}
70
71
isc_result_t
72
0
dns__dbiterator_prev(dns_dbiterator_t *iterator DNS__DB_FLARG) {
73
  /*
74
   * Move the node cursor to the previous node in the database (if any).
75
   */
76
77
0
  REQUIRE(DNS_DBITERATOR_VALID(iterator));
78
79
0
  return (iterator->methods->prev(iterator DNS__DB_FLARG_PASS));
80
0
}
81
82
isc_result_t
83
0
dns__dbiterator_next(dns_dbiterator_t *iterator DNS__DB_FLARG) {
84
  /*
85
   * Move the node cursor to the next node in the database (if any).
86
   */
87
88
0
  REQUIRE(DNS_DBITERATOR_VALID(iterator));
89
90
0
  return (iterator->methods->next(iterator DNS__DB_FLARG_PASS));
91
0
}
92
93
isc_result_t
94
dns__dbiterator_current(dns_dbiterator_t *iterator, dns_dbnode_t **nodep,
95
0
      dns_name_t *name DNS__DB_FLARG) {
96
  /*
97
   * Return the current node.
98
   */
99
100
0
  REQUIRE(DNS_DBITERATOR_VALID(iterator));
101
0
  REQUIRE(nodep != NULL && *nodep == NULL);
102
0
  REQUIRE(name == NULL || dns_name_hasbuffer(name));
103
104
0
  return (iterator->methods->current(iterator, nodep,
105
0
             name DNS__DB_FLARG_PASS));
106
0
}
107
108
isc_result_t
109
0
dns_dbiterator_pause(dns_dbiterator_t *iterator) {
110
  /*
111
   * Pause iteration.
112
   */
113
114
0
  REQUIRE(DNS_DBITERATOR_VALID(iterator));
115
116
0
  return (iterator->methods->pause(iterator));
117
0
}
118
119
isc_result_t
120
0
dns_dbiterator_origin(dns_dbiterator_t *iterator, dns_name_t *name) {
121
  /*
122
   * Return the origin to which returned node names are relative.
123
   */
124
125
0
  REQUIRE(DNS_DBITERATOR_VALID(iterator));
126
0
  REQUIRE(iterator->relative_names);
127
0
  REQUIRE(dns_name_hasbuffer(name));
128
129
0
  return (iterator->methods->origin(iterator, name));
130
0
}