⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t_rbt.c

📁 package of develop dns
💻 C
📖 第 1 页 / 共 3 页
字号:
	int			result;	int			nfails;	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;	dns_fixedname_t		dns_origin;	isc_result_t		expected_result;	result = T_UNRESOLVED;	nfails = 0;	mctx = NULL;	ectx = NULL;	dns_fixedname_init(&dns_name);	dns_fixedname_init(&dns_origin);	isc_result = isc_mem_create(0, 0, &mctx);	if (isc_result != ISC_R_SUCCESS) {		t_info("isc_mem_create failed %s\n",		       isc_result_totext(isc_result));		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);	}	t_info("testing for last name of %s, origin of %s\n",	       expected_lastname, expected_lastorigin);	dns_result = dns_rbtnodechain_last(&chain, rbt,					   dns_fixedname_name(&dns_name),					   dns_fixedname_name(&dns_origin));	if (dns_result != DNS_R_NEWORIGIN) {		t_info("dns_rbtnodechain_last unexpectedly returned %s\n",		       dns_result_totext(dns_result));	}	nfails = t_namechk(dns_result, &dns_name, expected_lastname,			   &dns_origin, expected_lastorigin, DNS_R_NEWORIGIN);	t_info("testing for previous name of %s, origin of %s\n",	       expected_prevname, expected_prevorigin);	dns_fixedname_init(&dns_name);	dns_result = dns_rbtnodechain_prev(&chain,					   dns_fixedname_name(&dns_name),					   dns_fixedname_name(&dns_origin));	if ((dns_result != ISC_R_SUCCESS) &&	    (dns_result != DNS_R_NEWORIGIN)) {		t_info("dns_rbtnodechain_prev unexpectedly returned %s\n",		       dns_result_totext(dns_result));	}	if (strcasecmp(expected_lastorigin, expected_prevorigin) == 0)		expected_result = ISC_R_SUCCESS;	else		expected_result = DNS_R_NEWORIGIN;	nfails += t_namechk(dns_result, &dns_name, expected_prevname,			    &dns_origin, expected_prevorigin, expected_result);	if (nfails)		result = T_FAIL;	else		result = T_PASS;	dns_rbtnodechain_invalidate(&chain);	dns_rbt_destroy(&rbt);	isc_hash_destroy();	isc_entropy_detach(&ectx);	isc_mem_destroy(&mctx);	return(result);}static inttest_dns_rbtnodechain_last(const char *filename) {	FILE		*fp;	char		*p;	int		line;	int		cnt;	int		result;	int		nfails;	int		nprobs;	nfails = 0;	nprobs = 0;	fp = fopen(filename, "r");	if (fp != NULL) {		line = 0;		while ((p = t_fgetbs(fp)) != NULL) {			++line;			/*			 * Skip comment lines.			 */			if ((isspace((unsigned char)*p)) || (*p == '#'))				continue;			cnt = t_bustline(p, Tokens);			if (cnt == 5) {				result = t_dns_rbtnodechain_last(						Tokens[0],     /* dbfile */						Tokens[1],     /* lastname */						Tokens[2],     /* lastorigin */						Tokens[3],     /* prevname */						Tokens[4]);    /* prevorigin */				if (result != T_PASS) {					if (result == T_FAIL)						++nfails;					else						++nprobs;				}			} else {				t_info("bad format in %s at line %d\n",				       filename, line);				++nprobs;			}			(void)free(p);		}		(void)fclose(fp);	} else {		t_info("Missing datafile %s\n", filename);		++nprobs;	}	result = T_UNRESOLVED;	if ((nfails == 0) && (nprobs == 0))		result = T_PASS;	else if (nfails)		result = T_FAIL;	return(result);}static const char *a11 = "a call to "			"dns_rbtnodechain_last(chain, rbt, name, origin) "			"sets name to point to the last node of the megatree, "			"origin to the name of the level above it, "			"and returns DNS_R_NEWORIGIN";static voidt11() {	int	result;	t_assert("dns_rbtnodechain_last", 11, T_REQUIRED, a11);	result = test_dns_rbtnodechain_last("dns_rbtnodechain_last_data");	t_result(result);}static intt_dns_rbtnodechain_next(char *dbfile, char *findname,			char *nextname, char *nextorigin){	int			result;	int			len;	int			nfails;	dns_rbt_t		*rbt;	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;	dns_fixedname_t		dns_foundname;	dns_fixedname_t		dns_nextname;	dns_fixedname_t		dns_origin;	isc_buffer_t		isc_buffer;	result = T_UNRESOLVED;	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",		       isc_result_totext(isc_result));		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);	}	len = strlen(findname);	isc_buffer_init(&isc_buffer, findname, len);	isc_buffer_add(&isc_buffer, len);	dns_fixedname_init(&dns_foundname);	dns_fixedname_init(&dns_findname);	dns_fixedname_init(&dns_nextname);	dns_fixedname_init(&dns_origin);	dns_result = dns_name_fromtext(dns_fixedname_name(&dns_findname),				       &isc_buffer, NULL, ISC_FALSE, NULL);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_name_fromtext failed %s\n",		       dns_result_totext(dns_result));		return(result);	}	/*	 * Set the starting node.	 */	node = NULL;	dns_result = dns_rbt_findnode(rbt, dns_fixedname_name(&dns_findname),				      dns_fixedname_name(&dns_foundname),				      &node, &chain, DNS_RBTFIND_EMPTYDATA,				      NULL, NULL);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_rbt_findnode failed %s\n",		       dns_result_totext(dns_result));		return(result);	}	/*	 * Check next.	 */	t_info("checking for next name of %s and new origin of %s\n",	       nextname, nextorigin);	dns_result = dns_rbtnodechain_next(&chain,					   dns_fixedname_name(&dns_nextname),					   dns_fixedname_name(&dns_origin));	if ((dns_result != ISC_R_SUCCESS) && (dns_result != DNS_R_NEWORIGIN)) {		t_info("dns_rbtnodechain_next unexpectedly returned %s\n",		       dns_result_totext(dns_result));	}	nfails += t_namechk(dns_result, &dns_nextname, nextname, &dns_origin,			    nextorigin, DNS_R_NEWORIGIN);	if (nfails)		result = T_FAIL;	else		result = T_PASS;	dns_rbtnodechain_invalidate(&chain);	dns_rbt_destroy(&rbt);	isc_hash_destroy();	isc_entropy_detach(&ectx);	isc_mem_destroy(&mctx);	return(result);}static inttest_dns_rbtnodechain_next(const char *filename) {	FILE		*fp;	char		*p;	int		line;	int		cnt;	int		result;	int		nfails;	int		nprobs;	nfails = 0;	nprobs = 0;	fp = fopen(filename, "r");	if (fp != NULL) {		line = 0;		while ((p = t_fgetbs(fp)) != NULL) {			++line;			/*			 * Skip comment lines.			 */			if ((isspace((unsigned char)*p)) || (*p == '#'))				continue;			cnt = t_bustline(p, Tokens);			if (cnt == 4) {				result = t_dns_rbtnodechain_next(						Tokens[0],     /* dbfile */						Tokens[1],     /* findname */						Tokens[2],     /* nextname */						Tokens[3]);    /* nextorigin */				if (result != T_PASS) {					if (result == T_FAIL)						++nfails;					else						++nprobs;				}			} else {				t_info("bad format in %s at line %d\n",				       filename, line);				++nprobs;			}			(void)free(p);		}		(void)fclose(fp);	} else {		t_info("Missing datafile %s\n", filename);		++nprobs;	}	result = T_UNRESOLVED;	if ((nfails == 0) && (nprobs == 0))		result = T_PASS;	else if (nfails)		result = T_FAIL;	return(result);}static const char *a12 = "a call to "			"dns_rbtnodechain_next(chain, name, origin) "			"sets name to point to the next node of the tree "			"and returns ISC_R_SUCCESS or "			"DNS_R_NEWORIGIN on success";static voidt12() {	int	result;	t_assert("dns_rbtnodechain_next", 12, T_REQUIRED, a12);	result = test_dns_rbtnodechain_next("dns_rbtnodechain_next_data");	t_result(result);}static intt_dns_rbtnodechain_prev(char *dbfile, char *findname, char *prevname,			char *prevorigin){	int			result;	int			len;	int			nfails;	dns_rbt_t		*rbt;	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;	dns_fixedname_t		dns_foundname;	dns_fixedname_t		dns_prevname;	dns_fixedname_t		dns_origin;	isc_buffer_t		isc_buffer;	result = T_UNRESOLVED;	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",		       isc_result_totext(isc_result));		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);	}	len = strlen(findname);	isc_buffer_init(&isc_buffer, findname, len);	isc_buffer_add(&isc_buffer, len);	dns_fixedname_init(&dns_foundname);	dns_fixedname_init(&dns_findname);	dns_fixedname_init(&dns_prevname);	dns_fixedname_init(&dns_origin);	dns_result = dns_name_fromtext(dns_fixedname_name(&dns_findname),				       &isc_buffer, NULL, ISC_FALSE, NULL);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_name_fromtext failed %s\n",		       dns_result_totext(dns_result));		return(result);	}	/*	 * Set the starting node.	 */	node = NULL;	dns_result = dns_rbt_findnode(rbt, dns_fixedname_name(&dns_findname),				      dns_fixedname_name(&dns_foundname),				      &node, &chain, DNS_RBTFIND_EMPTYDATA,				      NULL, NULL);	if (dns_result != ISC_R_SUCCESS) {		t_info("dns_rbt_findnode failed %s\n",		       dns_result_totext(dns_result));		return(result);	}	/*	 * Check next.	 */	t_info("checking for next name of %s and new origin of %s\n",	       prevname, prevorigin);	dns_result = dns_rbtnodechain_prev(&chain,					   dns_fixedname_name(&dns_prevname),					   dns_fixedname_name(&dns_origin));	if ((dns_result != ISC_R_SUCCESS) && (dns_result != DNS_R_NEWORIGIN)) {		t_info("dns_rbtnodechain_prev unexpectedly returned %s\n",		       dns_result_totext(dns_result));	}	nfails += t_namechk(dns_result, &dns_prevname, prevname, &dns_origin,			    prevorigin, DNS_R_NEWORIGIN);	if (nfails)		result = T_FAIL;	else		result = T_PASS;	dns_rbtnodechain_invalidate(&chain);	dns_rbt_destroy(&rbt);	isc_hash_destroy();	isc_entropy_detach(&ectx);	isc_mem_destroy(&mctx);	return(result);}static inttest_dns_rbtnodechain_prev(const char *filename) {	FILE		*fp;	char		*p;	int		line;	int		cnt;	int		result;	int		nfails;	int		nprobs;	nfails = 0;	nprobs = 0;	fp = fopen(filename, "r");	if (fp != NULL) {		line = 0;		while ((p = t_fgetbs(fp)) != NULL) {			++line;			/*			 * Skip comment lines.			 */			if ((isspace((unsigned char)*p)) || (*p == '#'))				continue;			cnt = t_bustline(p, Tokens);			if (cnt == 4) {				result = t_dns_rbtnodechain_prev(						Tokens[0],     /* dbfile */						Tokens[1],     /* findname */						Tokens[2],     /* prevname */						Tokens[3]);    /* prevorigin */				if (result != T_PASS) {					if (result == T_FAIL)						++nfails;					else						++nprobs;				}			} else {				t_info("bad format in %s at line %d\n",						filename, line);				++nprobs;			}			(void)free(p);		}		(void)fclose(fp);	} else {		t_info("Missing datafile %s\n", filename);		++nprobs;	}	result = T_UNRESOLVED;	if ((nfails == 0) && (nprobs == 0))		result = T_PASS;	else if (nfails)		result = T_FAIL;	return(result);}static const char *a13 = "a call to "			"dns_rbtnodechain_prev(chain, name, origin) "			"sets name to point to the previous node of the tree "			"and returns ISC_R_SUCCESS or "			"DNS_R_NEWORIGIN on success";static voidt13() {	int	result;	t_assert("dns_rbtnodechain_prev", 13, T_REQUIRED, a13);	result = test_dns_rbtnodechain_prev("dns_rbtnodechain_prev_data");	t_result(result);}testspec_t	T_testlist[] = {	{	t1,	"dns_rbt_create"		},	{	t2,	"dns_rbt_addname 1"		},	{	t3,	"dns_rbt_addname 2"		},	{	t4,	"dns_rbt_deletename 1"		},	{	t5,	"dns_rbt_deletename 2"		},	{	t6,	"dns_rbt_findname 1"		},	{	t7,	"dns_rbt_findname 2"		},	{	t8,	"dns_rbt_findname 3"		},	{	t9,	"dns_rbtnodechain_init"		},	{	t10,	"dns_rbtnodechain_first"	},	{	t11,	"dns_rbtnodechain_last"		},	{	t12,	"dns_rbtnodechain_next"		},	{	t13,	"dns_rbtnodechain_prev"		},	{	NULL,	NULL				}};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -