From 55fc138760bf3bc227214e00ca8eadb21db47376 Mon Sep 17 00:00:00 2001 From: "Alfred E. Heggestad" Date: Mon, 30 Jan 2012 15:35:10 +0000 Subject: [PATCH] patch: dns client dnsc_srv_set(), copy DNS servers to fixed-size array --- src/dns/client.c | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/src/dns/client.c b/src/dns/client.c index 865f27c..b4a2ec6 100644 --- a/src/dns/client.c +++ b/src/dns/client.c @@ -29,6 +29,7 @@ enum { TCP_HASH_SIZE = 2, CONN_TIMEOUT = 10 * 1000, IDLE_TIMEOUT = 30 * 1000, + SRVC_MAX = 32, }; @@ -80,7 +81,7 @@ struct dnsc { struct hash *ht_query; struct hash *ht_tcpconn; struct udp_sock *us; - struct sa *srvv; + struct sa srvv[SRVC_MAX]; uint32_t srvc; }; @@ -773,7 +774,6 @@ static void dnsc_destructor(void *data) mem_deref(dnsc->ht_tcpconn); mem_deref(dnsc->ht_query); mem_deref(dnsc->us); - mem_deref(dnsc->srvv); } @@ -831,23 +831,17 @@ int dnsc_alloc(struct dnsc **dcpp, const struct dnsc_conf *conf, int dnsc_srv_set(struct dnsc *dnsc, const struct sa *srvv, uint32_t srvc) { - const size_t sz = srvc * sizeof(*srvv); - struct sa *v = NULL; + uint32_t i; if (!dnsc) return EINVAL; - if (srvv && srvc) { - v = mem_alloc(sz, NULL); - if (!v) - return ENOMEM; + dnsc->srvc = min((uint32_t)ARRAY_SIZE(dnsc->srvv), srvc); - memcpy(v, srvv, sz); + if (srvv) { + for (i=0; isrvc; i++) + dnsc->srvv[i] = srvv[i]; } - dnsc->srvv = mem_deref(dnsc->srvv); - dnsc->srvv = v; - dnsc->srvc = srvc; - return 0; }