瀏覽代碼

rework the alloca() loop slightly to save some space

Mike Frysinger 20 年之前
父節點
當前提交
17cb155231
共有 1 個文件被更改,包括 6 次插入8 次删除
  1. 6 8
      libc/inet/if_index.c

+ 6 - 8
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);