From 17cb1552310b7745c873ab98580d3ea0ed91878e Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Fri, 6 Jan 2006 04:08:00 +0000 Subject: rework the alloca() loop slightly to save some space --- libc/inet/if_index.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'libc/inet') diff --git a/libc/inet/if_index.c b/libc/inet/if_index.c index 5837faa65..abfb26e00 100644 --- a/libc/inet/if_index.c +++ b/libc/inet/if_index.c @@ -101,21 +101,19 @@ if_nameindex (void) rq_len = RQ_IFS * sizeof (struct ifreq); /* Read all the interfaces out of the kernel. */ - ifc.ifc_buf = alloca (rq_len); - ifc.ifc_len = rq_len; - while (1) + /* Note: alloca's in this loop are diff from glibc because it's smaller */ + do { + ifc.ifc_buf = extend_alloca (ifc.ifc_buf, rq_len, 2 * rq_len); + ifc.ifc_len = rq_len; + if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0) { __close (fd); return NULL; } - if (ifc.ifc_len < rq_len) - 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); nifs = ifc.ifc_len / sizeof(struct ifreq); -- cgit v1.2.3