Import bind 9.5.2 vendor sources.
[dragonfly.git] / contrib / bind-9.5.2 / lib / dns / dbiterator.c
1 /*
2  * Copyright (C) 2004, 2005, 2007  Internet Systems Consortium, Inc. ("ISC")
3  * Copyright (C) 1999-2001  Internet Software Consortium.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
10  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
12  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
14  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15  * PERFORMANCE OF THIS SOFTWARE.
16  */
17
18 /* $Id: dbiterator.c,v 1.18 2007/06/19 23:47:16 tbox Exp $ */
19
20 /*! \file */
21
22 #include <config.h>
23
24 #include <isc/util.h>
25
26 #include <dns/dbiterator.h>
27 #include <dns/name.h>
28
29 void
30 dns_dbiterator_destroy(dns_dbiterator_t **iteratorp) {
31         /*
32          * Destroy '*iteratorp'.
33          */
34
35         REQUIRE(iteratorp != NULL);
36         REQUIRE(DNS_DBITERATOR_VALID(*iteratorp));
37
38         (*iteratorp)->methods->destroy(iteratorp);
39
40         ENSURE(*iteratorp == NULL);
41 }
42
43 isc_result_t
44 dns_dbiterator_first(dns_dbiterator_t *iterator) {
45         /*
46          * Move the node cursor to the first node in the database (if any).
47          */
48
49         REQUIRE(DNS_DBITERATOR_VALID(iterator));
50
51         return (iterator->methods->first(iterator));
52 }
53
54 isc_result_t
55 dns_dbiterator_last(dns_dbiterator_t *iterator) {
56         /*
57          * Move the node cursor to the first node in the database (if any).
58          */
59
60         REQUIRE(DNS_DBITERATOR_VALID(iterator));
61
62         return (iterator->methods->last(iterator));
63 }
64
65 isc_result_t
66 dns_dbiterator_seek(dns_dbiterator_t *iterator, dns_name_t *name) {
67         /*
68          * Move the node cursor to the node with name 'name'.
69          */
70
71         REQUIRE(DNS_DBITERATOR_VALID(iterator));
72
73         return (iterator->methods->seek(iterator, name));
74 }
75
76 isc_result_t
77 dns_dbiterator_prev(dns_dbiterator_t *iterator) {
78         /*
79          * Move the node cursor to the previous node in the database (if any).
80          */
81
82         REQUIRE(DNS_DBITERATOR_VALID(iterator));
83
84         return (iterator->methods->prev(iterator));
85 }
86
87 isc_result_t
88 dns_dbiterator_next(dns_dbiterator_t *iterator) {
89         /*
90          * Move the node cursor to the next node in the database (if any).
91          */
92
93         REQUIRE(DNS_DBITERATOR_VALID(iterator));
94
95         return (iterator->methods->next(iterator));
96 }
97
98 isc_result_t
99 dns_dbiterator_current(dns_dbiterator_t *iterator, dns_dbnode_t **nodep,
100                        dns_name_t *name)
101 {
102         /*
103          * Return the current node.
104          */
105
106         REQUIRE(DNS_DBITERATOR_VALID(iterator));
107         REQUIRE(nodep != NULL && *nodep == NULL);
108         REQUIRE(name == NULL || dns_name_hasbuffer(name));
109
110         return (iterator->methods->current(iterator, nodep, name));
111 }
112
113 isc_result_t
114 dns_dbiterator_pause(dns_dbiterator_t *iterator) {
115         /*
116          * Pause iteration.
117          */
118
119         REQUIRE(DNS_DBITERATOR_VALID(iterator));
120
121         return (iterator->methods->pause(iterator));
122 }
123
124 isc_result_t
125 dns_dbiterator_origin(dns_dbiterator_t *iterator, dns_name_t *name) {
126
127         /*
128          * Return the origin to which returned node names are relative.
129          */
130
131         REQUIRE(DNS_DBITERATOR_VALID(iterator));
132         REQUIRE(iterator->relative_names);
133         REQUIRE(dns_name_hasbuffer(name));
134
135         return (iterator->methods->origin(iterator, name));
136 }
137
138 void
139 dns_dbiterator_setcleanmode(dns_dbiterator_t *iterator, isc_boolean_t mode) {
140         REQUIRE(DNS_DBITERATOR_VALID(iterator));
141
142         iterator->cleaning = mode;
143 }