version 1.14, 2011/02/04 02:01:12 |
version 1.15, 2012/03/13 21:13:40 |
Line 63 __weak_alias(freeifaddrs,_freeifaddrs) |
|
Line 63 __weak_alias(freeifaddrs,_freeifaddrs) |
|
int |
int |
getifaddrs(struct ifaddrs **pif) |
getifaddrs(struct ifaddrs **pif) |
{ |
{ |
int icnt = 1; |
size_t icnt = 1; |
int dcnt = 0; |
size_t dcnt = 0; |
int ncnt = 0; |
size_t ncnt = 0; |
int mib[6]; |
static const int mib[] = { |
|
CTL_NET, |
|
PF_ROUTE, |
|
0, /* protocol */ |
|
0, /* wildcard address family */ |
|
NET_RT_IFLIST, |
|
0 /* no flags */ |
|
}; |
size_t needed; |
size_t needed; |
char *buf; |
char *buf; |
char *next; |
char *next; |
Line 85 getifaddrs(struct ifaddrs **pif) |
|
Line 92 getifaddrs(struct ifaddrs **pif) |
|
|
|
_DIAGASSERT(pif != NULL); |
_DIAGASSERT(pif != NULL); |
|
|
mib[0] = CTL_NET; |
if (sysctl(mib, (u_int)__arraycount(mib), NULL, &needed, NULL, 0) < 0) |
mib[1] = PF_ROUTE; |
|
mib[2] = 0; /* protocol */ |
|
mib[3] = 0; /* wildcard address family */ |
|
mib[4] = NET_RT_IFLIST; |
|
mib[5] = 0; /* no flags */ |
|
if (sysctl(mib, __arraycount(mib), NULL, &needed, NULL, 0) < 0) |
|
return (-1); |
return (-1); |
if ((buf = malloc(needed)) == NULL) |
if ((buf = malloc(needed)) == NULL) |
return (-1); |
return (-1); |
if (sysctl(mib, __arraycount(mib), buf, &needed, NULL, 0) < 0) { |
if (sysctl(mib, (u_int)__arraycount(mib), buf, &needed, NULL, 0) < 0) { |
free(buf); |
free(buf); |
return (-1); |
return (-1); |
} |
} |