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