diff options
Diffstat (limited to 'rfc1035/rfc1035udp.c')
| -rw-r--r-- | rfc1035/rfc1035udp.c | 49 | 
1 files changed, 40 insertions, 9 deletions
| diff --git a/rfc1035/rfc1035udp.c b/rfc1035/rfc1035udp.c index c128efd..2a4ed34 100644 --- a/rfc1035/rfc1035udp.c +++ b/rfc1035/rfc1035udp.c @@ -40,15 +40,11 @@ int rfc1035_send_udp(int fd, const struct sockaddr *sin, int sin_len,  	return (-1);  } - -struct rfc1035_udp_query_responses * -rfc1035_udp_query_response_alloc(const char **queries, -				 const unsigned *querylens, -				 int n_queries) +static struct rfc1035_udp_query_responses * +rfc1035_udp_query_response_alloc_common(int n_queries)  {  	struct rfc1035_udp_query_response *buf=  		calloc(n_queries, sizeof(struct rfc1035_udp_query_response)); -	int n;  	struct rfc1035_udp_query_responses *resps; @@ -65,10 +61,45 @@ rfc1035_udp_query_response_alloc(const char **queries,  	resps->n_queries=n_queries;  	resps->queries=buf; -	for (n=0; n<n_queries; ++n) +	return resps; +} + +struct rfc1035_udp_query_responses * +rfc1035_udp_query_response_alloc(const char **queries, +				 const unsigned *querylens, +				 int n_queries) +{ +	struct rfc1035_udp_query_responses *resps = +		rfc1035_udp_query_response_alloc_common(n_queries); + +	if (!resps) +		return 0; + +	for (int n=0; n<n_queries; ++n) +	{ +		resps->queries[n].query=queries[n]; +		resps->queries[n].querylen=querylens[n]; +	} + +	return resps; +} + + +struct rfc1035_udp_query_responses * +rfc1035_udp_query_response_alloc_bis(struct querybuf *queries, +				 int n_queries) +{ +	struct rfc1035_udp_query_responses *resps = +		rfc1035_udp_query_response_alloc_common(n_queries); + +	if (!resps) +		return 0; + + +	for (int n=0; n<n_queries; ++n)  	{ -		buf[n].query=queries[n]; -		buf[n].querylen=querylens[n]; +		resps->queries[n].query=queries[n].qbuf; +		resps->queries[n].querylen=queries[n].qbuflen;  	}  	return resps; | 
