about summary refs log tree commit diff
path: root/sysdeps/mach/hurd/if_index.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/mach/hurd/if_index.c')
-rw-r--r--sysdeps/mach/hurd/if_index.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/sysdeps/mach/hurd/if_index.c b/sysdeps/mach/hurd/if_index.c
index 7a58c9c5d1..63dad54124 100644
--- a/sysdeps/mach/hurd/if_index.c
+++ b/sysdeps/mach/hurd/if_index.c
@@ -1,5 +1,5 @@
 /* Find network interface names and index numbers.  Hurd version.
-   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 2000,01,02 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
@@ -80,7 +80,6 @@ if_nameindex (void)
   struct if_nameindex *idx = NULL;
 
   ifc.ifc_buf = data;
-  ifc.ifc_len = sizeof (data);
 
   if (fd < 0)
     return NULL;
@@ -90,8 +89,8 @@ if_nameindex (void)
     nifs = 0;
   else
     {
-      err = __pfinet_siocgifconf (server, -1, &ifc.ifc_buf,
-				  &ifc.ifc_len);
+      size_t len = sizeof data;
+      err = __pfinet_siocgifconf (server, -1, &ifc.ifc_buf, &len);
       if (err == MACH_SEND_INVALID_DEST || err == MIG_SERVER_DIED)
 	{
 	  /* On the first use of the socket server during the operation,
@@ -99,13 +98,13 @@ if_nameindex (void)
 	  server = _hurd_socket_server (PF_INET, 1);
 	  if (server == MACH_PORT_NULL)
 	    goto out;
-	  err = __pfinet_siocgifconf (server, -1, &ifc.ifc_buf,
-				      &ifc.ifc_len);
+	  err = __pfinet_siocgifconf (server, -1, &ifc.ifc_buf, &len);
 	}
       if (err)
 	goto out;
 
-      nifs = ifc.ifc_len / sizeof (struct ifreq);
+      ifc.ifc_len = len;
+      nifs = len / sizeof (struct ifreq);
     }
 
   idx = malloc ((nifs + 1) * sizeof (struct if_nameindex));