* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: t_db.c,v 1.31 2004/03/05 04:58:42 marka Exp $ */
+/* $Id: t_db.c,v 1.32 2004/10/25 01:27:54 marka Exp $ */
#include <config.h>
#include <ctype.h>
#include <stdlib.h>
+#include <isc/entropy.h>
+#include <isc/hash.h>
#include <isc/mem.h>
#include <isc/string.h>
#include <isc/util.h>
isc_result_t dns_result;
isc_result_t isc_result;
isc_mem_t *mctx;
+ isc_entropy_t *ectx;
dns_dbnode_t *nodep;
isc_textregion_t textregion;
isc_buffer_t findname_buffer;
result = T_UNRESOLVED;
db = NULL;
mctx = NULL;
+ ectx = NULL;
filename = T_ARG(0);
db_type = T_ARG(1);
origin = T_ARG(2);
return(T_UNRESOLVED);
}
+ isc_result = isc_entropy_create(mctx, &ectx);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_entropy_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
+ isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_hash_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_entropy_detach(&ectx);
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
dns_result = t_create(db_type, origin, class, model, mctx, &db);
if (dns_result != ISC_R_SUCCESS) {
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result),
dns_result_totext(exp_load_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_FAIL);
}
t_info("dns_name_fromtext failed %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
find_type,
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_db_closeversion(db, &versionp, ISC_FALSE);
cleanup_db:
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
}
isc_result_t dns_result;
isc_result_t isc_result;
isc_mem_t *mctx;
+ isc_entropy_t *ectx;
dns_rdataclass_t rdataclass;
isc_textregion_t textregion;
isc_buffer_t origin_buffer;
db = NULL;
mctx = NULL;
+ ectx = NULL;
t_info("testing using file %s\n", filename);
return(T_UNRESOLVED);
}
+ isc_result = isc_entropy_create(mctx, &ectx);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_entropy_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
+ isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_hash_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_entropy_detach(&ectx);
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
dns_result = dns_db_create(mctx, db_type,
dns_fixedname_name(&dns_origin),
dbtype, rdataclass, 0, NULL, &db);
if (dns_result != ISC_R_SUCCESS) {
t_info("dns_db_create failed %s\n",
dns_result_totext(dns_result));
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
}
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
}
isc_result_t dns_result;
isc_result_t isc_result;
isc_mem_t *mctx;
+ isc_entropy_t *ectx;
dns_db_t *db;
dns_fixedname_t dns_origin;
dns_fixedname_t dns_dborigin;
db = NULL;
mctx = NULL;
-
+ ectx = NULL;
filename = T_ARG(0);
origin = T_ARG(1);
return(T_UNRESOLVED);
}
+ isc_result = isc_entropy_create(mctx, &ectx);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_entropy_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
+ isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_hash_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_entropy_detach(&ectx);
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
dns_result = t_create("rbt", origin, "in", "isc_true", mctx, &db);
if (dns_result != ISC_R_SUCCESS) {
t_info("t_create failed %s\n",
dns_result_totext(dns_result));
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("dns_db_load failed %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("dns_name_fromtext failed %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
}
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
isc_result_t dns_result;
isc_result_t isc_result;
isc_mem_t *mctx;
+ isc_entropy_t *ectx;
dns_db_t *db;
dns_rdataclass_t rdataclass;
dns_rdataclass_t db_rdataclass;
class = T_ARG(1);
db = NULL;
mctx = NULL;
-
+ ectx = NULL;
t_info("testing with database %s and class %s\n",
filename, class);
return(T_UNRESOLVED);
}
+ isc_result = isc_entropy_create(mctx, &ectx);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_entropy_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
+ isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_hash_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_entropy_detach(&ectx);
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
dns_result = t_create("rbt", ".", class, "isc_true", mctx, &db);
if (dns_result != ISC_R_SUCCESS) {
t_info("t_create failed %s\n",
dns_result_totext(dns_result));
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("dns_db_load failed %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
}
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
isc_result_t dns_result;
isc_result_t isc_result;
isc_mem_t *mctx;
+ isc_entropy_t *ectx;
dns_dbnode_t *nodep;
isc_textregion_t textregion;
isc_buffer_t findname_buffer;
findtype = T_ARG(6);
db = NULL;
mctx = NULL;
+ ectx = NULL;
t_info("testing using file %s and name %s\n", filename, findname);
return(T_UNRESOLVED);
}
+ isc_result = isc_entropy_create(mctx, &ectx);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_entropy_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
+ isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_hash_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_entropy_detach(&ectx);
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
dns_result = t_create(db_type, origin, class, model, mctx, &db);
if (dns_result != ISC_R_SUCCESS) {
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("dns_db_load returned %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("dns_name_fromtext failed %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
findtype,
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("unable to find %s using current version\n", findname);
dns_db_closeversion(db, &cversionp, ISC_FALSE);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_rdataset_disassociate(&rdataset);
dns_db_closeversion(db, &cversionp, ISC_FALSE);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_db_closeversion(db, &nversionp, ISC_FALSE);
dns_db_closeversion(db, &cversionp, ISC_FALSE);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_db_closeversion(db, &cversionp, ISC_FALSE);
dns_db_closeversion(db, &nversionp, ISC_FALSE);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_FAIL);
}
t_info("cound not find %s using current version\n", findname);
dns_db_closeversion(db, &cversionp, ISC_FALSE);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
result = T_FAIL;
}
dns_db_closeversion(db, &cversionp, ISC_FALSE);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
isc_result_t dns_result;
isc_result_t isc_result;
isc_mem_t *mctx;
+ isc_entropy_t *ectx;
dns_dbnode_t *nodep;
dns_dbnode_t *found_nodep;
isc_textregion_t textregion;
newtype = T_ARG(6);
db = NULL;
mctx = NULL;
+ ectx = NULL;
/*
* Open a new version, add some data, commit it,
return(T_UNRESOLVED);
}
+ isc_result = isc_entropy_create(mctx, &ectx);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_entropy_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
+ isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_hash_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_entropy_detach(&ectx);
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
dns_result = t_create(db_type, origin, class, model, mctx, &db);
if (dns_result != ISC_R_SUCCESS) {
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("dns_db_load returned %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("dns_name_fromtext failed %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("dns_db_findnode failed %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result));
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result));
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result));
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result));
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_db_closeversion(db, &nversionp, ISC_FALSE);
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
if (dns_rdataset_isassociated(&found_rdataset))
dns_rdataset_disassociate(&found_rdataset);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_FAIL);
}
dns_rdataset_disassociate(&found_rdataset);
dns_db_closeversion(db, &nversionp, ISC_FALSE);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_FAIL);
}
dns_rdataset_disassociate(&found_rdataset);
dns_db_detachnode(db, &found_nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
isc_result_t dns_result;
isc_result_t isc_result;
isc_mem_t *mctx;
+ isc_entropy_t *ectx;
dns_dbnode_t *nodep;
isc_textregion_t textregion;
isc_buffer_t name_buffer;
result = T_UNRESOLVED;
db = NULL;
mctx = NULL;
+ ectx = NULL;
/*
* Open a new version, add some data,
return(T_UNRESOLVED);
}
+ isc_result = isc_entropy_create(mctx, &ectx);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_entropy_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
+ isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_hash_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_entropy_detach(&ectx);
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
dns_result = t_create(db_type, origin, class, model, mctx, &db);
if (dns_result != ISC_R_SUCCESS) {
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("dns_db_load returned %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("dns_name_fromtext failed %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result));
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("dns_db_findnode %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result));
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_db_closeversion(db, &nversionp, ISC_FALSE);
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result));
dns_db_closeversion(db, &nversionp, ISC_FALSE);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result));
dns_db_closeversion(db, &nversionp, ISC_FALSE);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result));
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result));
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result));
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_db_closeversion(db, &nversionp, ISC_FALSE);
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
if (dns_rdataset_isassociated(&found_rdataset))
dns_rdataset_disassociate(&found_rdataset);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_FAIL);
}
dns_rdataset_disassociate(&found_rdataset);
dns_db_closeversion(db, &cversionp, ISC_FALSE);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_FAIL);
}
dns_db_closeversion(db, &cversionp, ISC_FALSE);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
if (nfails == 0)
isc_result_t dns_result;
isc_result_t isc_result;
isc_mem_t *mctx;
+ isc_entropy_t *ectx;
dns_dbnode_t *nodep;
isc_textregion_t textregion;
isc_buffer_t name_buffer;
result = T_UNRESOLVED;
db = NULL;
mctx = NULL;
+ ectx = NULL;
/*
* Open a new version, add some data,
return(T_UNRESOLVED);
}
+ isc_result = isc_entropy_create(mctx, &ectx);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_entropy_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
+ isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_hash_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_entropy_detach(&ectx);
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
dns_result = t_create(db_type, origin, class, model, mctx, &db);
if (dns_result != ISC_R_SUCCESS) {
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("dns_db_load returned %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("dns_name_fromtext failed %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result));
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("dns_db_findnode %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result));
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_db_closeversion(db, &nversionp, ISC_FALSE);
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result));
dns_db_closeversion(db, &nversionp, ISC_FALSE);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result));
dns_db_closeversion(db, &nversionp, ISC_FALSE);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
new_type, dns_result_totext(dns_result));
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result));
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result));
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_db_closeversion(db, &nversionp, ISC_FALSE);
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
if (dns_rdataset_isassociated(&found_rdataset))
dns_rdataset_disassociate(&found_rdataset);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_FAIL);
}
dns_rdataset_disassociate(&found_rdataset);
dns_db_closeversion(db, &nversionp, ISC_FALSE);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_FAIL);
}
dns_db_detachnode(db, &nodep);
dns_db_closeversion(db, &cversionp, ISC_FALSE);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_FAIL);
}
dns_rdataset_disassociate(&found_rdataset);
dns_db_closeversion(db, &cversionp, ISC_FALSE);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
if (nfails == 0)
isc_result_t exp_result;
isc_result_t isc_result;
isc_mem_t *mctx;
+ isc_entropy_t *ectx;
dns_dbnode_t *nodep;
isc_buffer_t name_buffer;
dns_fixedname_t dns_foundname;
node_xtime = T_ARG(5);
find_xtime = T_ARG(6);
exp_find_result = T_ARG(7);
+ mctx = NULL;
+ ectx = NULL;
result = T_UNRESOLVED;
return(T_UNRESOLVED);
}
- mctx = NULL;
isc_result = isc_mem_create(0, 0, &mctx);
if (isc_result != ISC_R_SUCCESS) {
t_info("isc_mem_create failed %s\n",
return(T_UNRESOLVED);
}
+ isc_result = isc_entropy_create(mctx, &ectx);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_entropy_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
+ isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_hash_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_entropy_detach(&ectx);
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
db = NULL;
dns_result = t_create(db_type, origin, class, "cache", mctx, &db);
if (dns_result != ISC_R_SUCCESS) {
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("dns_db_load returned %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
if (dns_result != ISC_R_SUCCESS) {
t_info("unable to find %s\n", existing_name);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result));
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_FAIL);
}
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
isc_result_t dns_result;
isc_result_t isc_result;
isc_mem_t *mctx;
+ isc_entropy_t *ectx;
dns_dbnode_t *nodep;
isc_buffer_t name_buffer;
dns_rdataset_t rdataset;
db = NULL;
mctx = NULL;
+ ectx = NULL;
result = T_UNRESOLVED;
t_info("testing using file %s and name %s\n", filename, find_name);
return(T_UNRESOLVED);
}
+ isc_result = isc_entropy_create(mctx, &ectx);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_entropy_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
+ isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_hash_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
dns_result = t_create(db_type, origin, class, model, mctx, &db);
if (dns_result != ISC_R_SUCCESS) {
isc_mem_destroy(&mctx);
}
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
isc_result_t dns_result;
isc_result_t isc_result;
isc_mem_t *mctx;
+ isc_entropy_t *ectx;
dns_dbnode_t *nodep;
dns_dbnode_t *newnodep;
isc_buffer_t name_buffer;
result = T_UNRESOLVED;
db = NULL;
mctx = NULL;
+ ectx = NULL;
nfails = 0;
t_info("testing using file %s and name %s\n", filename, newname);
return(T_UNRESOLVED);
}
+ isc_result = isc_entropy_create(mctx, &ectx);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_entropy_create failed %s\n",
+ isc_result_totext(isc_result));
+ return(T_UNRESOLVED);
+ }
+
+ isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_hash_create failed %s\n",
+ isc_result_totext(isc_result));
+ return(T_UNRESOLVED);
+ }
+
dns_result = t_create(db_type, origin, class, model, mctx, &db);
if (dns_result != ISC_R_SUCCESS) {
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("dns_db_load returned %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
dns_result_totext(dns_result));
dns_db_detachnode(db, &nodep);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("dns_db_findnode %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_FAIL);
}
dns_db_detachnode(db, &nodep);
dns_db_closeversion(db, &cversionp, ISC_FALSE);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
if (nfails == 0)
isc_stdtime_t now;
isc_result_t exp_result;
isc_mem_t *mctx;
+ isc_entropy_t *ectx;
dns_dbnode_t *nodep;
isc_textregion_t textregion;
isc_buffer_t findname_buffer;
expected_result = T_ARG(9);
db = NULL;
mctx = NULL;
+ ectx = NULL;
opts = 0;
t_info("testing using %s, name %s, type %s\n", dbfile, findname,
return(T_UNRESOLVED);
}
+ isc_result = isc_entropy_create(mctx, &ectx);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_entropy_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
+ isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_hash_create failed %s\n",
+ isc_result_totext(isc_result));
+ isc_entropy_detach(&ectx);
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
dns_result = t_create(dbtype, dborigin, dbclass, dbmodel, mctx, &db);
if (dns_result != ISC_R_SUCCESS) {
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("dns_db_load returned %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
t_info("dns_name_fromtext failed %s\n",
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
findtype,
dns_result_totext(dns_result));
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(T_UNRESOLVED);
}
if (dns_db_iszone(db))
dns_db_closeversion(db, &cversionp, ISC_FALSE);
dns_db_detach(&db);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: t_rbt.c,v 1.25 2004/03/05 04:59:03 marka Exp $ */
+/* $Id: t_rbt.c,v 1.26 2004/10/25 01:27:54 marka Exp $ */
#include <config.h>
#include <ctype.h>
#include <stdlib.h>
+#include <isc/entropy.h>
#include <isc/mem.h>
+#include <isc/util.h>
+#include <isc/hash.h>
#include <isc/string.h>
#include <dns/fixedname.h>
isc_result_t isc_result;
isc_result_t dns_result;
isc_mem_t *mctx;
+ isc_entropy_t *ectx;
dns_name_t *dns_name;
result = T_UNRESOLVED;
t_info("testing using name %s\n", testname);
mctx = NULL;
+ ectx = NULL;
+
isc_result = isc_mem_create(0, 0, &mctx);
if (isc_result != ISC_R_SUCCESS) {
t_info("isc_mem_create: %s: exiting\n",
return(T_UNRESOLVED);
}
+ isc_result = isc_entropy_create(mctx, &ectx);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_entropy_create: %s: exiting\n",
+ dns_result_totext(isc_result));
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
+ isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_hash_create: %s: exiting\n",
+ dns_result_totext(isc_result));
+ isc_entropy_detach(&ectx);
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
rbt = NULL;
if (rbt_init(filename, &rbt, mctx) != 0) {
if (strcmp(command, "create") == 0)
result = T_FAIL;
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
}
}
dns_rbt_destroy(&rbt);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
}
dns_rbtnode_t *node;
dns_rbtnodechain_t chain;
isc_mem_t *mctx;
+ isc_entropy_t *ectx;
isc_result_t isc_result;
isc_result_t dns_result;
dns_fixedname_t dns_findname;
nfails = 0;
mctx = NULL;
+ ectx = NULL;
+
isc_result = isc_mem_create(0, 0, &mctx);
if (isc_result != ISC_R_SUCCESS) {
t_info("isc_mem_create failed %s\n",
return(result);
}
+ isc_result = isc_entropy_create(mctx, &ectx);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_entropy_create: %s: exiting\n",
+ dns_result_totext(isc_result));
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
+ isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_hash_create: %s: exiting\n",
+ dns_result_totext(isc_result));
+ isc_entropy_detach(&ectx);
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
dns_rbtnodechain_init(&chain, mctx);
rbt = NULL;
if (rbt_init(dbfile, &rbt, mctx)) {
t_info("rbt_init %s failed\n", dbfile);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
}
dns_rbtnodechain_invalidate(&chain);
dns_rbt_destroy(&rbt);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
dns_rbt_t *rbt;
dns_rbtnodechain_t chain;
isc_mem_t *mctx;
+ isc_entropy_t *ectx;
isc_result_t isc_result;
isc_result_t dns_result;
dns_fixedname_t dns_name;
nfails = 0;
mctx = NULL;
+ ectx = NULL;
dns_fixedname_init(&dns_name);
dns_fixedname_init(&dns_origin);
return(result);
}
+ isc_result = isc_entropy_create(mctx, &ectx);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_entropy_create: %s: exiting\n",
+ dns_result_totext(isc_result));
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
+ isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_hash_create: %s: exiting\n",
+ dns_result_totext(isc_result));
+ isc_entropy_detach(&ectx);
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
dns_rbtnodechain_init(&chain, mctx);
rbt = NULL;
if (rbt_init(dbfile, &rbt, mctx)) {
t_info("rbt_init %s failed\n", dbfile);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
}
dns_rbtnodechain_invalidate(&chain);
dns_rbt_destroy(&rbt);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
}
dns_rbt_t *rbt;
dns_rbtnodechain_t chain;
isc_mem_t *mctx;
+ isc_entropy_t *ectx;
isc_result_t isc_result;
isc_result_t dns_result;
dns_fixedname_t dns_name;
nfails = 0;
mctx = NULL;
+ ectx = NULL;
dns_fixedname_init(&dns_name);
dns_fixedname_init(&dns_origin);
return(result);
}
+ isc_result = isc_entropy_create(mctx, &ectx);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_entropy_create: %s: exiting\n",
+ dns_result_totext(isc_result));
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
+ isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_hash_create: %s: exiting\n",
+ dns_result_totext(isc_result));
+ isc_entropy_detach(&ectx);
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
dns_rbtnodechain_init(&chain, mctx);
rbt = NULL;
if (rbt_init(dbfile, &rbt, mctx)) {
t_info("rbt_init %s failed\n", dbfile);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
}
dns_rbtnodechain_invalidate(&chain);
dns_rbt_destroy(&rbt);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
dns_rbtnode_t *node;
dns_rbtnodechain_t chain;
isc_mem_t *mctx;
+ isc_entropy_t *ectx;
isc_result_t isc_result;
isc_result_t dns_result;
dns_fixedname_t dns_findname;
nfails = 0;
mctx = NULL;
+ ectx = NULL;
+
isc_result = isc_mem_create(0, 0, &mctx);
if (isc_result != ISC_R_SUCCESS) {
t_info("isc_mem_create failed %s\n",
return(result);
}
+ isc_result = isc_entropy_create(mctx, &ectx);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_entropy_create: %s: exiting\n",
+ dns_result_totext(isc_result));
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
+ isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_hash_create: %s: exiting\n",
+ dns_result_totext(isc_result));
+ isc_entropy_detach(&ectx);
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
dns_rbtnodechain_init(&chain, mctx);
rbt = NULL;
if (rbt_init(dbfile, &rbt, mctx)) {
t_info("rbt_init %s failed\n", dbfile);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
}
dns_rbtnodechain_invalidate(&chain);
dns_rbt_destroy(&rbt);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
dns_rbtnode_t *node;
dns_rbtnodechain_t chain;
isc_mem_t *mctx;
+ isc_entropy_t *ectx = NULL;
isc_result_t isc_result;
isc_result_t dns_result;
dns_fixedname_t dns_findname;
nfails = 0;
mctx = NULL;
+ ectx = NULL;
+
isc_result = isc_mem_create(0, 0, &mctx);
if (isc_result != ISC_R_SUCCESS) {
t_info("isc_mem_create failed %s\n",
return(result);
}
+ isc_result = isc_entropy_create(mctx, &ectx);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_entropy_create: %s: exiting\n",
+ dns_result_totext(isc_result));
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
+ isc_result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
+ if (isc_result != ISC_R_SUCCESS) {
+ t_info("isc_hash_create: %s: exiting\n",
+ dns_result_totext(isc_result));
+ isc_entropy_detach(&ectx);
+ isc_mem_destroy(&mctx);
+ return(T_UNRESOLVED);
+ }
+
dns_rbtnodechain_init(&chain, mctx);
rbt = NULL;
if (rbt_init(dbfile, &rbt, mctx)) {
t_info("rbt_init %s failed\n", dbfile);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
}
dns_rbtnodechain_invalidate(&chain);
dns_rbt_destroy(&rbt);
+ isc_hash_destroy();
+ isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx);
return(result);
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rbt.c,v 1.129 2004/10/11 05:49:28 marka Exp $ */
+/* $Id: rbt.c,v 1.130 2004/10/25 01:27:54 marka Exp $ */
/* Principal Authors: DCL */
unsigned int nodecount;
unsigned int hashsize;
dns_rbtnode_t ** hashtable;
- unsigned int quantum;
};
#define RED 0
return (PARENT(root));
}
-#ifdef DNS_RBT_USEHASH
-static inline void
-compute_node_hash(dns_rbtnode_t *node) {
- unsigned int hash;
- dns_name_t name;
- dns_rbtnode_t *up_node;
-
- dns_name_init(&name, NULL);
- NODENAME(node, &name);
- hash = dns_name_hashbylabel(&name, ISC_FALSE);
-
- up_node = find_up(node);
- if (up_node != NULL)
- hash += HASHVAL(up_node);
-
- HASHVAL(node) = hash;
-}
-#endif
-
/*
* Forward declarations.
*/
#ifdef DNS_RBT_USEHASH
static inline void
-hash_node(dns_rbt_t *rbt, dns_rbtnode_t *node);
+hash_node(dns_rbt_t *rbt, dns_rbtnode_t *node, dns_name_t *name);
static inline void
unhash_node(dns_rbt_t *rbt, dns_rbtnode_t *node);
#else
-#define hash_node(rbt, node) (ISC_R_SUCCESS)
+#define hash_node(rbt, node, name) (ISC_R_SUCCESS)
#define unhash_node(rbt, node)
#endif
dns_rbt_deletetree(dns_rbt_t *rbt, dns_rbtnode_t *node);
static void
-dns_rbt_deletetreeflat(dns_rbt_t *rbt, dns_rbtnode_t **nodep);
+dns_rbt_deletetreeflat(dns_rbt_t *rbt, unsigned int quantum,
+ dns_rbtnode_t **nodep);
/*
* Initialize a red/black tree of trees.
return (result);
}
#endif
- rbt->quantum = 0;
rbt->magic = RBT_MAGIC;
*rbtp = rbt;
rbt = *rbtp;
- rbt->quantum = quantum;
-
- dns_rbt_deletetreeflat(rbt, &rbt->root);
+ dns_rbt_deletetreeflat(rbt, quantum, &rbt->root);
if (rbt->root != NULL)
return (ISC_R_QUOTA);
* Does this thing have too many variables or what?
*/
dns_rbtnode_t **root, *parent, *child, *current, *new_current;
- dns_name_t *add_name, current_name, *prefix, *suffix;
- dns_fixedname_t fixedcopy, fixedprefix, fixedsuffix;
+ dns_name_t *add_name, *new_name, current_name, *prefix, *suffix;
+ dns_fixedname_t fixedcopy, fixedprefix, fixedsuffix, fnewname;
dns_offsets_t current_offsets;
dns_namereln_t compared;
isc_result_t result = ISC_R_SUCCESS;
dns_rbtnodechain_t chain;
unsigned int common_labels;
+ unsigned int nlabels, hlabels;
int order;
REQUIRE(VALID_RBT(rbt));
new_current->is_root = 1;
rbt->root = new_current;
*nodep = new_current;
- hash_node(rbt, new_current);
+ hash_node(rbt, new_current, name);
}
return (result);
}
current = NULL;
child = *root;
dns_name_init(¤t_name, current_offsets);
+ dns_fixedname_init(&fnewname);
+ new_name = dns_fixedname_name(&fnewname);
+ nlabels = dns_name_countlabels(name);
+ hlabels = 0;
do {
current = child;
* the non-common parts of these two names should
* start a new tree.
*/
+ hlabels += common_labels;
if (compared == dns_namereln_subdomain) {
/*
* All of the existing labels are in common,
ATTRS(current) &= ~DNS_NAMEATTR_ABSOLUTE;
rbt->nodecount++;
- hash_node(rbt, new_current);
+ dns_name_getlabelsequence(name,
+ nlabels - hlabels,
+ hlabels, new_name);
+ hash_node(rbt, new_current, new_name);
if (common_labels ==
dns_name_countlabels(add_name)) {
dns_rbt_addonlevel(new_current, current, order, root);
rbt->nodecount++;
*nodep = new_current;
- hash_node(rbt, new_current);
+ hash_node(rbt, new_current, name);
}
return (result);
dns_namereln_t compared;
isc_result_t result, saved_result;
unsigned int common_labels;
+ unsigned int hlabels = 0;
int order;
REQUIRE(VALID_RBT(rbt));
dns_name_init(&hash_name, NULL);
hashagain:
+ /*
+ * Hash includes tail.
+ */
+ dns_name_getlabelsequence(name,
+ nlabels - tlabels,
+ hlabels + tlabels,
+ &hash_name);
+ hash = dns_name_fullhash(&hash_name, ISC_FALSE);
dns_name_getlabelsequence(search_name,
nlabels - tlabels,
tlabels, &hash_name);
- hash = HASHVAL(up_current) +
- dns_name_hashbylabel(&hash_name, ISC_FALSE);
for (hnode = rbt->hashtable[hash % rbt->hashsize];
hnode != NULL;
*/
dns_name_split(search_name, common_labels,
search_name, NULL);
+ hlabels += common_labels;
/*
* This might be the closest enclosing name.
*/
#ifdef DNS_RBT_USEHASH
static inline void
-hash_add_node(dns_rbt_t *rbt, dns_rbtnode_t *node) {
+hash_add_node(dns_rbt_t *rbt, dns_rbtnode_t *node, dns_name_t *name) {
unsigned int hash;
- compute_node_hash(node);
+ HASHVAL(node) = dns_name_fullhash(name, ISC_FALSE);
hash = HASHVAL(node) % rbt->hashsize;
HASHNEXT(node) = rbt->hashtable[hash];
}
static inline void
-hash_node(dns_rbt_t *rbt, dns_rbtnode_t *node) {
+hash_node(dns_rbt_t *rbt, dns_rbtnode_t *node, dns_name_t *name) {
REQUIRE(DNS_RBTNODE_VALID(node));
if (rbt->nodecount >= (rbt->hashsize *3))
rehash(rbt);
- hash_add_node(rbt, node);
+ hash_add_node(rbt, node, name);
}
static inline void
}
static void
-dns_rbt_deletetreeflat(dns_rbt_t *rbt, dns_rbtnode_t **nodep) {
+dns_rbt_deletetreeflat(dns_rbt_t *rbt, unsigned int quantum,
+ dns_rbtnode_t **nodep)
+{
dns_rbtnode_t *parent;
dns_rbtnode_t *node = *nodep;
REQUIRE(VALID_RBT(rbt));
isc_mem_put(rbt->mctx, node, NODE_SIZE(node));
rbt->nodecount--;
node = parent;
- if (rbt->quantum != 0 && --rbt->quantum == 0) {
+ if (quantum != 0 && --quantum == 0) {
*nodep = node;
return;
}