chiark / gitweb /
+ * Many memory leaks fixed.
[adns.git] / src / setup.c
index ba80f14a66a1dceda08929efc80f795eeb0e1982..e19a70536b2753a62debb6268492010e8c9b0551 100644 (file)
@@ -62,6 +62,11 @@ static void addserver(adns_state ads, struct in_addr addr) {
   ads->nservers++;
 }
 
+static void freesearchlist(adns_state ads) {
+  if (ads->nsearchlist) free(*ads->searchlist);
+  free(ads->searchlist);
+}
+
 static void saveerr(adns_state ads, int en) {
   if (!ads->configerrno) ads->configerrno= en;
 }
@@ -133,7 +138,7 @@ static void ccf_search(adns_state ads, const char *fn, int lno, const char *buf)
     *newchars++ = 0;
   }
 
-  free(ads->searchlist);
+  freesearchlist(ads);
   ads->nsearchlist= count;
   ads->searchlist= newptrs;
 }
@@ -517,7 +522,7 @@ static void init_abort(adns_state ads) {
   free(ads);
 }
 
-int adns_init(adns_state *ads_r, int flags, FILE *diagfile) {
+int adns_init(adns_state *ads_r, adns_initflags flags, FILE *diagfile) {
   adns_state ads;
   const char *res_options, *adns_res_options;
   int r;
@@ -557,7 +562,7 @@ int adns_init(adns_state *ads_r, int flags, FILE *diagfile) {
   return 0;
 }
 
-int adns_init_strcfg(adns_state *ads_r, int flags,
+int adns_init_strcfg(adns_state *ads_r, adns_initflags flags,
                     FILE *diagfile, const char *configtext) {
   adns_state ads;
   int r;
@@ -591,6 +596,7 @@ void adns_finish(adns_state ads) {
   if (ads->tcpsocket >= 0) close(ads->tcpsocket);
   adns__vbuf_free(&ads->tcpsend);
   adns__vbuf_free(&ads->tcprecv);
+  freesearchlist(ads);
   free(ads);
 }