summary refs log tree commit diff
path: root/resolv
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2002-07-24 22:56:44 +0000
committerRoland McGrath <roland@gnu.org>2002-07-24 22:56:44 +0000
commit7f1deee65e0a90d9e6699068b5d63a28d2546e12 (patch)
treeb75aefbdd5d6d8347e0d4d3f665d8e49fcf6c43b /resolv
parent11d657d7278ae4f96f0f4c8655991f2818d0eeb9 (diff)
downloadglibc-7f1deee65e0a90d9e6699068b5d63a28d2546e12.tar.gz
glibc-7f1deee65e0a90d9e6699068b5d63a28d2546e12.tar.xz
glibc-7f1deee65e0a90d9e6699068b5d63a28d2546e12.zip
Added <ifaddrs.h> interface with functions `getifaddrs', `freeifaddrs'.
	This implementation supports only IPv4.
	* inet/ifaddrs.h: New file.
	* sysdeps/generic/ifaddrs.c: New file.
	* sysdeps/gnu/ifaddrs.c: New file.
	* inet/test-ifaddrs.c: New file.
	* inet/Makefile (routines): Add ifaddrs.
	(headers): Add ifaddrs.h here.
	(tests): Add test-ifaddrs.
	* inet/Versions (GLIBC_2.3): New set, add getifaddrs and freeifaddrs.

	* resolv/res_hconf.c (_res_hconf_reorder_addrs): Use an explicit
	socket call to get an AF_INET socket, instead of using __opensock.
	The SIOCGIFNETMASK ioctl will work only with a PF_INET socket.

	* sysdeps/generic/ifreq.h (__ifreq): Take third argument SOCKFD,
	if not -1 use it instead of calling __opensock.
	* sysdeps/unix/sysv/linux/ifreq.h (__ifreq): Likewise.
	* sysdeps/mach/hurd/ifreq.h (__ifreq): Take new argument and ignore it.
	* resolv/res_hconf.c (_res_hconf_reorder_addrs): Pass new argument.

	* sysdeps/mach/hurd/ifreq.h: New file.
	* sysdeps/generic/ifreq.h (__if_freereq): Take second argument NUM_IFS.
	* sysdeps/unix/sysv/linux/ifreq.h (__if_freereq): Likewise.
	* resolv/res_hconf.c (_res_hconf_reorder_addrs): Update caller.
Diffstat (limited to 'resolv')
-rw-r--r--resolv/res_hconf.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/resolv/res_hconf.c b/resolv/res_hconf.c
index e6faa6855e..b814f62dd3 100644
--- a/resolv/res_hconf.c
+++ b/resolv/res_hconf.c
@@ -538,7 +538,8 @@ _res_hconf_reorder_addrs (struct hostent *hp)
 
       num_ifs = 0;
 
-      sd = __opensock ();
+      /* The SIOCGIFNETMASK ioctl will only work on an AF_INET socket.  */
+      sd = __socket (AF_INET, SOCK_DGRAM, 0);
       if (sd < 0)
 	return;
 
@@ -546,7 +547,7 @@ _res_hconf_reorder_addrs (struct hostent *hp)
       __libc_lock_lock (lock);
 
       /* Get a list of interfaces.  */
-      __ifreq (&ifr, &num);
+      __ifreq (&ifr, &num, sd);
       if (!ifr)
 	goto cleanup;
 
@@ -577,7 +578,7 @@ _res_hconf_reorder_addrs (struct hostent *hp)
       ifaddrs = realloc (ifaddrs, num_ifs * sizeof (ifaddrs[0]));
 
     cleanup1:
-      __if_freereq (ifr);
+      __if_freereq (ifr, num);
 
     cleanup:
       /* Release lock, preserve error value, and close socket.  */