From de7b50f41386cdbe7ce2b0b5833d57965fd2c641 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 29 Jun 2004 02:48:21 +0000 Subject: [PATCH] (if_nameindex): Use extend_alloca. --- sysdeps/unix/sysv/linux/if_index.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/sysdeps/unix/sysv/linux/if_index.c b/sysdeps/unix/sysv/linux/if_index.c index 76349bd..92fb11b 100644 --- a/sysdeps/unix/sysv/linux/if_index.c +++ b/sysdeps/unix/sysv/linux/if_index.c @@ -16,6 +16,7 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +#include #include #include #include @@ -118,17 +119,21 @@ if_nameindex (void) rq_len = RQ_IFS * sizeof (struct ifreq); /* Read all the interfaces out of the kernel. */ - do + ifc.ifc_buf = alloca (rq_len); + ifc.ifc_len = rq_len; + while (1) { - ifc.ifc_buf = alloca (ifc.ifc_len = rq_len); - if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0) + if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0) { close_not_cancel_no_status (fd); return NULL; } - rq_len *= 2; + if (ifc.ifc_len < rq_len || ! old_siocgifconf) + break; + + ifc.ifc_buf = extend_alloca (ifc.ifc_buf, rq_len, 2 * rq_len); + ifc.ifc_len = rq_len; } - while (ifc.ifc_len == rq_len && old_siocgifconf); nifs = ifc.ifc_len / sizeof (struct ifreq); -- 2.7.4