aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2012-07-25 21:19:13 +0000
committerJoseph Myers <joseph@codesourcery.com>2012-07-25 21:19:13 +0000
commit89b4b02f421d2a6d24eb632d9c6977dbe786e6ee (patch)
treecfb4d8f06f24847cb5214a0bb2bc476085415706
parent842a39cd1ad9391af7a63a19c87f66a730e027a9 (diff)
downloadglibc-89b4b02f421d2a6d24eb632d9c6977dbe786e6ee.tar.xz
glibc-89b4b02f421d2a6d24eb632d9c6977dbe786e6ee.zip
Remove pre-2.4.21 Linux kernel support.
-rw-r--r--ChangeLog92
-rw-r--r--nscd/gai.c6
-rw-r--r--ports/ChangeLog.arm5
-rw-r--r--ports/ChangeLog.m68k8
-rw-r--r--ports/sysdeps/unix/sysv/linux/arm/kernel-features.h4
-rw-r--r--ports/sysdeps/unix/sysv/linux/m68k/kernel-features.h10
-rw-r--r--sysdeps/unix/sysv/linux/check_pf.c127
-rw-r--r--sysdeps/unix/sysv/linux/configure15
-rw-r--r--sysdeps/unix/sysv/linux/configure.in15
-rw-r--r--sysdeps/unix/sysv/linux/if_index.c83
-rw-r--r--sysdeps/unix/sysv/linux/ifaddrs.c31
-rw-r--r--sysdeps/unix/sysv/linux/kernel-features.h37
-rw-r--r--sysdeps/unix/sysv/linux/netlinkaccess.h9
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c34
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S21
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/fe_mask.c35
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/fe_nomask.c35
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/fe_mask.c7
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/fe_nomask.c7
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/getcontext.S28
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S19
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S37
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S36
23 files changed, 185 insertions, 516 deletions
diff --git a/ChangeLog b/ChangeLog
index aa7ce43e29..c80c8a981c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,95 @@
+2012-07-25 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #13717]
+ * sysdeps/unix/sysv/linux/configure.in (arch_minimum_kernel):
+ Change to 2.4.21 where previously 2.4.1.
+ * sysdeps/unix/sysv/linux/configure: Regenerated.
+ * sysdeps/unix/sysv/linux/kernel-features.h [(__powerpc__ ||
+ __sh__) && !__powerpc64__] (__ASSUME_FCNTL64): Do not condition on
+ Linux kernel version.
+ (__ASSUME_STD_AUXV): Remove.
+ [__powerpc__] (__ASSUME_VFORK_SYSCALL): Do not condition on Linux
+ kernel version.
+ [__powerpc__ && !__powerpc64] (__ASSUME_MMAP2_SYSCALL): Likewise.
+ (__ASSUME_NEW_PRCTL_SYSCALL): Remove.
+ (__ASSUME_FIXED_CLONE_SYSCALL): Likewise.
+ (__ASSUME_NEW_RT_SIGRETURN_SYSCALL): Likewise.
+ (__ASSUME_NETLINK_SUPPORT): Likewise.
+ * nscd/gai.c [NEED_NETLINK && __ASSUME_NETLINK_SUPPORT == 0]
+ (__no_netlink_support): Remove conditional definition.
+ * sysdeps/unix/sysv/linux/check_pf.c (__no_netlink_support):
+ Remove.
+ (__check_pf) [!__ASSUME_NETLINK_SUPPORT]: Remove conditional code.
+ [__ASSUME_NETLINK_SUPPORT]: Make code unconditional.
+ * sysdeps/unix/sysv/linux/if_index.c [!__ASSUME_NETLINK_SUPPORT]
+ (if_nameindex_ioctl): Remove.
+ (if_nameindex_netlink): Do not handle __no_netlink_support.
+ (if_nameindex) [!__ASSUME_NETLINK_SUPPORT]: Remove conditional
+ code.
+ * sysdeps/unix/sysv/linux/ifaddrs.c [!__ASSUME_NETLINK_SUPPORT]:
+ Remove conditional code.
+ (__netlink_open) [!__ASSUME_NETLINK_SUPPORT]: Remove conditional
+ code.
+ (getifaddrs_internal) [__ASSUME_NETLINK_SUPPORT]: Make code
+ unconditional.
+ [!__ASSUME_NETLINK_SUPPORT]: Remove conditional code.
+ [__ASSUME_NETLINK_SUPPORT] (freeifaddrs): Make code unconditional.
+ * sysdeps/unix/sysv/linux/netlinkaccess.h (__no_netlink_support):
+ Remove.
+ * sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c
+ [!__ASSUME_STD_AUXV]: Remove conditional code.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S (__clone)
+ [!__ASSUME_FIXED_CLONE_SYSCALL]: Remove conditional code.
+ [__ASSUME_FIXED_CLONE_SYSCALL]: Make code unconditional.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/fe_mask.c
+ [!__ASSUME_NEW_PRCTL_SYSCALL] (fe_mask_handler): Remove.
+ (__fe_mask_env) [!__ASSUME_NEW_PRCTL_SYSCALL]: Remove conditional
+ code.
+ [__ASSUME_NEW_PRCTL_SYSCALL]: Make code unconditional.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/fe_nomask.c
+ [!__ASSUME_NEW_PRCTL_SYSCALL] (fe_nomask_handler): Remove.
+ (__fe_nomask_env) [!__ASSUME_NEW_PRCTL_SYSCALL]: Remove
+ conditional code.
+ [__ASSUME_NEW_PRCTL_SYSCALL]: Make code unconditional.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/fe_mask.c
+ (__fe_mask_env) [!__ASSUME_NEW_PRCTL_SYSCALL]: Remove conditional
+ code.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/fe_nomask.c
+ (__fe_nomask_env) [!__ASSUME_NEW_PRCTL_SYSCALL]: Remove
+ conditional code.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/getcontext.S
+ (__novec_getcontext) [__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Make
+ code unconditional.
+ (__novec_getcontext) [!__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Remove
+ conditional code.
+ (__getcontext) [__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Make code
+ unconditional.
+ (__getcontext) [!__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Remove
+ conditional code.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S
+ (__makecontext) [__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Make code
+ unconditional.
+ (__makecontext) [!__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Remove
+ conditional code.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S
+ (__novec_setcontext) [__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Make
+ code unconditional.
+ (__novec_setcontext) [!__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Remove
+ conditional code.
+ (__setcontext) [__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Make code
+ unconditional.
+ (__setcontext) [!__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Remove
+ conditional code.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S
+ (__novec_swapcontext) [__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Make
+ code unconditional.
+ (__novec_swapcontext) [!__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Remove
+ conditional code.
+ (__swapcontext) [__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Make code
+ unconditional.
+ (__swapcontext) [!__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Remove
+ conditional code.
+
2012-07-25 Andreas Schwab <schwab@linux-m68k.org>
* sysdeps/unix/sysv/linux/i386/accept4.S: Remove pseudo_end label.
diff --git a/nscd/gai.c b/nscd/gai.c
index 2df7ea7487..1c6527cf0c 100644
--- a/nscd/gai.c
+++ b/nscd/gai.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2004-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 2004.
@@ -43,7 +43,3 @@
/* Some variables normally defined in libc. */
service_user *__nss_hosts_database;
-
-#if defined NEED_NETLINK && __ASSUME_NETLINK_SUPPORT == 0
-int __no_netlink_support attribute_hidden;
-#endif
diff --git a/ports/ChangeLog.arm b/ports/ChangeLog.arm
index 3da39269fc..b921a769c5 100644
--- a/ports/ChangeLog.arm
+++ b/ports/ChangeLog.arm
@@ -1,3 +1,8 @@
+2012-07-25 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/unix/sysv/linux/arm/kernel-features.h
+ (__ASSUME_FCNTL64): Define unconditionally.
+
2012-07-25 Florian Weimer <fweimer@redhat.com>
* sysdeps/unix/sysv/linux/arm/nptl/libc.abilist: Add
diff --git a/ports/ChangeLog.m68k b/ports/ChangeLog.m68k
index 7ae6f4139f..f26c052e59 100644
--- a/ports/ChangeLog.m68k
+++ b/ports/ChangeLog.m68k
@@ -1,3 +1,11 @@
+2012-07-25 Joseph Myers <joseph@codesourcery.com>
+
+ * sysdeps/unix/sysv/linux/m68k/kernel-features.h
+ (__ASSUME_MMAP2_SYSCALL): Define unconditionally.
+ (__ASSUME_STAT64_SYSCALL): Likewise.
+ (__ASSUME_FCNTL64): Likewise.
+ (__ASSUME_VFORK_SYSCALL): Likewise.
+
2012-07-25 Florian Weimer <fweimer@redhat.com>
* sysdeps/unix/sysv/linux/m68k/coldfire/nptl/libc.abilist:
diff --git a/ports/sysdeps/unix/sysv/linux/arm/kernel-features.h b/ports/sysdeps/unix/sysv/linux/arm/kernel-features.h
index 90c59efead..9092df7192 100644
--- a/ports/sysdeps/unix/sysv/linux/arm/kernel-features.h
+++ b/ports/sysdeps/unix/sysv/linux/arm/kernel-features.h
@@ -28,9 +28,7 @@
#define __ASSUME_STAT64_SYSCALL 1
/* Arm got fcntl64 in 2.4.4. */
-#if __LINUX_KERNEL_VERSION >= 132100
-# define __ASSUME_FCNTL64 1
-#endif
+#define __ASSUME_FCNTL64 1
/* The vfork syscall on arm was definitely available in 2.4. */
#define __ASSUME_VFORK_SYSCALL 1
diff --git a/ports/sysdeps/unix/sysv/linux/m68k/kernel-features.h b/ports/sysdeps/unix/sysv/linux/m68k/kernel-features.h
index c12be9e07c..3b0b441aa4 100644
--- a/ports/sysdeps/unix/sysv/linux/m68k/kernel-features.h
+++ b/ports/sysdeps/unix/sysv/linux/m68k/kernel-features.h
@@ -18,12 +18,10 @@
<http://www.gnu.org/licenses/>. */
/* These features were surely available with 2.4.12. */
-#if __LINUX_KERNEL_VERSION >= 132108
-# define __ASSUME_MMAP2_SYSCALL 1
-# define __ASSUME_STAT64_SYSCALL 1
-# define __ASSUME_FCNTL64 1
-# define __ASSUME_VFORK_SYSCALL 1
-#endif
+#define __ASSUME_MMAP2_SYSCALL 1
+#define __ASSUME_STAT64_SYSCALL 1
+#define __ASSUME_FCNTL64 1
+#define __ASSUME_VFORK_SYSCALL 1
/* Many syscalls were added in 2.6.10 for m68k. */
#if __LINUX_KERNEL_VERSION >= 132618
diff --git a/sysdeps/unix/sysv/linux/check_pf.c b/sysdeps/unix/sysv/linux/check_pf.c
index 793d27db4e..950498acd4 100644
--- a/sysdeps/unix/sysv/linux/check_pf.c
+++ b/sysdeps/unix/sysv/linux/check_pf.c
@@ -1,5 +1,5 @@
/* Determine protocol families for which interfaces exist. Linux version.
- Copyright (C) 2003, 2006-2008, 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 2003-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -289,16 +289,6 @@ out_fail:
}
-/* We don't know if we have NETLINK support compiled into our
- Kernel. */
-#if __ASSUME_NETLINK_SUPPORT == 0
-/* Define in ifaddrs.h. */
-extern int __no_netlink_support attribute_hidden;
-#else
-# define __no_netlink_support 0
-#endif
-
-
void
attribute_hidden
__check_pf (bool *seen_ipv4, bool *seen_ipv6,
@@ -307,12 +297,10 @@ __check_pf (bool *seen_ipv4, bool *seen_ipv6,
*in6ai = NULL;
*in6ailen = 0;
- if (! __no_netlink_support)
- {
- struct cached_data *olddata = NULL;
- struct cached_data *data = NULL;
+ struct cached_data *olddata = NULL;
+ struct cached_data *data = NULL;
- __libc_lock_lock (lock);
+ __libc_lock_lock (lock);
#ifdef IS_IN_nscd
# define cache_valid() nl_timestamp != 0 && cache->timestamp == nl_timestamp
@@ -321,90 +309,59 @@ __check_pf (bool *seen_ipv4, bool *seen_ipv6,
({ uint32_t val = __nscd_get_nl_timestamp (); \
val != 0 && cache->timestamp == val; })
#endif
- if (cache != NULL && cache_valid ())
- {
- data = cache;
- atomic_increment (&cache->usecnt);
- }
- else
- {
- int fd = __socket (PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
-
- if (__builtin_expect (fd >= 0, 1))
- {
- struct sockaddr_nl nladdr;
- memset (&nladdr, '\0', sizeof (nladdr));
- nladdr.nl_family = AF_NETLINK;
+ if (cache != NULL && cache_valid ())
+ {
+ data = cache;
+ atomic_increment (&cache->usecnt);
+ }
+ else
+ {
+ int fd = __socket (PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
- socklen_t addr_len = sizeof (nladdr);
+ if (__builtin_expect (fd >= 0, 1))
+ {
+ struct sockaddr_nl nladdr;
+ memset (&nladdr, '\0', sizeof (nladdr));
+ nladdr.nl_family = AF_NETLINK;
- if(__bind (fd, (struct sockaddr *) &nladdr, sizeof (nladdr)) == 0
- && __getsockname (fd, (struct sockaddr *) &nladdr,
- &addr_len) == 0)
- data = make_request (fd, nladdr.nl_pid);
+ socklen_t addr_len = sizeof (nladdr);
- close_not_cancel_no_status (fd);
- }
+ if (__bind (fd, (struct sockaddr *) &nladdr, sizeof (nladdr)) == 0
+ && __getsockname (fd, (struct sockaddr *) &nladdr,
+ &addr_len) == 0)
+ data = make_request (fd, nladdr.nl_pid);
- if (data != NULL)
- {
- olddata = cache;
- cache = data;
- }
+ close_not_cancel_no_status (fd);
}
- __libc_lock_unlock (lock);
-
if (data != NULL)
{
- /* It worked. */
- *seen_ipv4 = data->seen_ipv4;
- *seen_ipv6 = data->seen_ipv6;
- *in6ailen = data->in6ailen;
- *in6ai = data->in6ai;
-
- if (olddata != NULL && olddata->usecnt > 0
- && atomic_add_zero (&olddata->usecnt, -1))
- free (olddata);
-
- return;
+ olddata = cache;
+ cache = data;
}
-
-#if __ASSUME_NETLINK_SUPPORT == 0
- /* Remember that there is no netlink support. */
- __no_netlink_support = 1;
-#else
- /* We cannot determine what interfaces are available. Be
- pessimistic. */
- *seen_ipv4 = true;
- *seen_ipv6 = true;
-#endif
}
-#if __ASSUME_NETLINK_SUPPORT == 0
- /* No netlink. Get the interface list via getifaddrs. */
- struct ifaddrs *ifa = NULL;
- if (getifaddrs (&ifa) != 0)
+ __libc_lock_unlock (lock);
+
+ if (data != NULL)
{
- /* We cannot determine what interfaces are available. Be
- pessimistic. */
- *seen_ipv4 = true;
- *seen_ipv6 = true;
+ /* It worked. */
+ *seen_ipv4 = data->seen_ipv4;
+ *seen_ipv6 = data->seen_ipv6;
+ *in6ailen = data->in6ailen;
+ *in6ai = data->in6ai;
+
+ if (olddata != NULL && olddata->usecnt > 0
+ && atomic_add_zero (&olddata->usecnt, -1))
+ free (olddata);
+
return;
}
- struct ifaddrs *runp;
- for (runp = ifa; runp != NULL; runp = runp->ifa_next)
- if (runp->ifa_addr != NULL)
- {
- if (runp->ifa_addr->sa_family == PF_INET)
- *seen_ipv4 = true;
- else if (runp->ifa_addr->sa_family == PF_INET6)
- *seen_ipv6 = true;
- }
-
- (void) freeifaddrs (ifa);
-#endif
+ /* We cannot determine what interfaces are available. Be
+ pessimistic. */
+ *seen_ipv4 = true;
+ *seen_ipv6 = true;
}
diff --git a/sysdeps/unix/sysv/linux/configure b/sysdeps/unix/sysv/linux/configure
index b86b763ad7..0650067e47 100644
--- a/sysdeps/unix/sysv/linux/configure
+++ b/sysdeps/unix/sysv/linux/configure
@@ -284,25 +284,22 @@ test -n "$arch_minimum_kernel" ||
case "$machine" in
i386*)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.4.1
+ arch_minimum_kernel=2.4.21
;;
powerpc/powerpc32)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.4.1
- ;;
- powerpc/powerpc64)
arch_minimum_kernel=2.4.21
;;
s390/s390-32)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.4.1
+ arch_minimum_kernel=2.4.21
;;
s390/s390-64)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.4.1
+ arch_minimum_kernel=2.4.21
;;
sh*)
- arch_minimum_kernel=2.4.1
+ arch_minimum_kernel=2.4.21
libc_cv_gcc_unwind_find_fde=yes
;;
sparc/sparc64*)
@@ -311,10 +308,10 @@ case "$machine" in
;;
sparc*)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.4.1
+ arch_minimum_kernel=2.4.21
;;
*)
- arch_minimum_kernel=2.4.1
+ arch_minimum_kernel=2.4.21
;;
esac
if test -n "$minimum_kernel"; then
diff --git a/sysdeps/unix/sysv/linux/configure.in b/sysdeps/unix/sysv/linux/configure.in
index 05cf3bc95e..fc514fbf4a 100644
--- a/sysdeps/unix/sysv/linux/configure.in
+++ b/sysdeps/unix/sysv/linux/configure.in
@@ -41,25 +41,22 @@ test -n "$arch_minimum_kernel" ||
case "$machine" in
i386*)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.4.1
+ arch_minimum_kernel=2.4.21
;;
powerpc/powerpc32)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.4.1
- ;;
- powerpc/powerpc64)
arch_minimum_kernel=2.4.21
;;
s390/s390-32)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.4.1
+ arch_minimum_kernel=2.4.21
;;
s390/s390-64)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.4.1
+ arch_minimum_kernel=2.4.21
;;
sh*)
- arch_minimum_kernel=2.4.1
+ arch_minimum_kernel=2.4.21
libc_cv_gcc_unwind_find_fde=yes
;;
sparc/sparc64*)
@@ -68,10 +65,10 @@ case "$machine" in
;;
sparc*)
libc_cv_gcc_unwind_find_fde=yes
- arch_minimum_kernel=2.4.1
+ arch_minimum_kernel=2.4.21
;;
*)
- arch_minimum_kernel=2.4.1
+ arch_minimum_kernel=2.4.21
;;
esac
if test -n "$minimum_kernel"; then
diff --git a/sysdeps/unix/sysv/linux/if_index.c b/sysdeps/unix/sysv/linux/if_index.c
index 3c86bb8654..cf33683925 100644
--- a/sysdeps/unix/sysv/linux/if_index.c
+++ b/sysdeps/unix/sysv/linux/if_index.c
@@ -74,90 +74,13 @@ if_freenameindex (struct if_nameindex *ifn)
libc_hidden_def (if_freenameindex)
-#if __ASSUME_NETLINK_SUPPORT == 0
-static struct if_nameindex *
-if_nameindex_ioctl (void)
-{
- int fd = __opensock ();
- struct ifconf ifc;
- unsigned int nifs, i;
- int rq_len;
- struct if_nameindex *idx = NULL;
-# define RQ_IFS 4
-
- if (fd < 0)
- return NULL;
-
- ifc.ifc_buf = NULL;
-
- /* We may be able to get the needed buffer size directly, rather than
- guessing. */
- ifc.ifc_buf = NULL;
- ifc.ifc_len = 0;
- if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0 || ifc.ifc_len == 0)
- rq_len = RQ_IFS * sizeof (struct ifreq);
- else
- rq_len = ifc.ifc_len;
-
- /* Read all the interfaces out of the kernel. */
- ifc.ifc_buf = alloca (rq_len);
- ifc.ifc_len = rq_len;
- if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0)
- {
- close_not_cancel_no_status (fd);
- return NULL;
- }
-
- nifs = ifc.ifc_len / sizeof (struct ifreq);
-
- idx = malloc ((nifs + 1) * sizeof (struct if_nameindex));
- if (idx == NULL)
- {
- close_not_cancel_no_status (fd);
- __set_errno (ENOBUFS);
- return NULL;
- }
-
- for (i = 0; i < nifs; ++i)
- {
- struct ifreq *ifr = &ifc.ifc_req[i];
- idx[i].if_name = __strdup (ifr->ifr_name);
- if (idx[i].if_name == NULL
- || __ioctl (fd, SIOCGIFINDEX, ifr) < 0)
- {
- int saved_errno = errno;
- unsigned int j;
-
- for (j = 0; j < i; ++j)
- free (idx[j].if_name);
- free (idx);
- close_not_cancel_no_status (fd);
- if (saved_errno == EINVAL)
- saved_errno = ENOSYS;
- else if (saved_errno == ENOMEM)
-