about summary refs log tree commit diff
path: root/resolv/res_libc.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2005-11-01 00:08:54 +0000
committerUlrich Drepper <drepper@redhat.com>2005-11-01 00:08:54 +0000
commitcb07f6f67db0ef4ccbf3bedfb7c9c4f140773d2c (patch)
tree2524b26825fbddf3868e2e8a976f030d4e1dd626 /resolv/res_libc.c
parent6ff8f07aba531a7f8641562889898b1a657d7d54 (diff)
downloadglibc-cb07f6f67db0ef4ccbf3bedfb7c9c4f140773d2c.tar.gz
glibc-cb07f6f67db0ef4ccbf3bedfb7c9c4f140773d2c.tar.xz
glibc-cb07f6f67db0ef4ccbf3bedfb7c9c4f140773d2c.zip
* resolv/res_init.c (__res_iclose): New function. Broken out of
	res_nclose.  Take addition parameter which determines whether
	addresses should be freed.
	(res_nclose): Call __res_iclose.
	(res_thread_freeres): Likewise.
	* resolv/res_data.c (res_close): Call __res_iclose.
	* resolv/res_libc.c (res_init): No need to separately free the
	addresses.
	(__res_maybe_init): Likewise.
	* resolv/res_send.c: Use __res_iclose instead of res_nclose.
	* resolv/Versions [GLIBC_PRIVATE]: Add __res_iclose.
	* include/resolv.h: Declare __res_iclose.
	Add libc_hidden_proto for __res_iclose.
	* hesiod/hesiod.c (__hesiod_res_set): No need to free name server
	addresses here again.
Diffstat (limited to 'resolv/res_libc.c')
-rw-r--r--resolv/res_libc.c16
1 files changed, 3 insertions, 13 deletions
diff --git a/resolv/res_libc.c b/resolv/res_libc.c
index 76abca8442..834773c32f 100644
--- a/resolv/res_libc.c
+++ b/resolv/res_libc.c
@@ -70,14 +70,8 @@ res_init(void) {
 		_res.retry = 4;
 	if (!(_res.options & RES_INIT))
 		_res.options = RES_DEFAULT;
-	else if (_res.nscount > 0) {
-		__res_nclose (&_res);	/* Close any VC sockets.  */
-
-		for (int ns = 0; ns < MAXNS; ns++) {
-			free (_res._u._ext.nsaddrs[ns]);
-			_res._u._ext.nsaddrs[ns] = NULL;
-		}
-	}
+	else if (_res.nscount > 0)
+		__res_iclose (&_res, true);	/* Close any VC sockets.  */
 
 	/*
 	 * This one used to initialize implicitly to zero, so unless the app
@@ -103,11 +97,7 @@ __res_maybe_init (res_state resp, int preinit)
 	if (resp->options & RES_INIT) {
 		if (__res_initstamp != resp->_u._ext.initstamp) {
 			if (resp->nscount > 0) {
-				__res_nclose (resp);
-				for (int ns = 0; ns < MAXNS; ns++) {
-					free (resp->_u._ext.nsaddrs[ns]);
-					resp->_u._ext.nsaddrs[ns] = NULL;
-				}
+				__res_iclose (resp, true);
 				return __res_vinit (resp, 1);
 			}
 		}