Juan Lang : iphlpapi: Combine #ifdef HAVE_IFADDRS_H blocks.
Alexandre Julliard
julliard at winehq.org
Mon Nov 14 13:33:59 CST 2011
Module: wine
Branch: master
Commit: cd0ee464cdd4b719e3245d33d5a7bd87dd948e1c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=cd0ee464cdd4b719e3245d33d5a7bd87dd948e1c
Author: Juan Lang <juan.lang at gmail.com>
Date: Sun Nov 13 08:25:52 2011 -0800
iphlpapi: Combine #ifdef HAVE_IFADDRS_H blocks.
---
dlls/iphlpapi/ifenum.c | 130 +++++++++++++++++++++++------------------------
1 files changed, 64 insertions(+), 66 deletions(-)
diff --git a/dlls/iphlpapi/ifenum.c b/dlls/iphlpapi/ifenum.c
index d84caed..7e0caf2 100644
--- a/dlls/iphlpapi/ifenum.c
+++ b/dlls/iphlpapi/ifenum.c
@@ -764,6 +764,69 @@ DWORD getIPAddrTable(PMIB_IPADDRTABLE *ppIpAddrTable, HANDLE heap, DWORD flags)
return ret;
}
+ULONG v6addressesFromIndex(DWORD index, SOCKET_ADDRESS **addrs, ULONG *num_addrs)
+{
+ struct ifaddrs *ifa;
+ ULONG ret;
+
+ if (!getifaddrs(&ifa))
+ {
+ struct ifaddrs *p;
+ ULONG n;
+ char name[IFNAMSIZ];
+
+ getInterfaceNameByIndex(index, name);
+ for (p = ifa, n = 0; p; p = p->ifa_next)
+ if (p->ifa_addr && p->ifa_addr->sa_family == AF_INET6 &&
+ !strcmp(name, p->ifa_name))
+ n++;
+ if (n)
+ {
+ *addrs = HeapAlloc(GetProcessHeap(), 0, n * (sizeof(SOCKET_ADDRESS) +
+ sizeof(struct WS_sockaddr_in6)));
+ if (*addrs)
+ {
+ struct WS_sockaddr_in6 *next_addr = (struct WS_sockaddr_in6 *)(
+ (BYTE *)*addrs + n * sizeof(SOCKET_ADDRESS));
+
+ for (p = ifa, n = 0; p; p = p->ifa_next)
+ {
+ if (p->ifa_addr && p->ifa_addr->sa_family == AF_INET6 &&
+ !strcmp(name, p->ifa_name))
+ {
+ struct sockaddr_in6 *addr = (struct sockaddr_in6 *)p->ifa_addr;
+
+ next_addr->sin6_family = WS_AF_INET6;
+ next_addr->sin6_port = addr->sin6_port;
+ next_addr->sin6_flowinfo = addr->sin6_flowinfo;
+ memcpy(&next_addr->sin6_addr, &addr->sin6_addr,
+ sizeof(next_addr->sin6_addr));
+ next_addr->sin6_scope_id = addr->sin6_scope_id;
+ (*addrs)[n].lpSockaddr = (LPSOCKADDR)next_addr;
+ (*addrs)[n].iSockaddrLength = sizeof(struct WS_sockaddr_in6);
+ next_addr++;
+ n++;
+ }
+ }
+ *num_addrs = n;
+ ret = ERROR_SUCCESS;
+ }
+ else
+ ret = ERROR_OUTOFMEMORY;
+ }
+ else
+ {
+ *addrs = NULL;
+ *num_addrs = 0;
+ ret = ERROR_SUCCESS;
+ }
+ freeifaddrs(ifa);
+ }
+ else
+ ret = ERROR_NO_DATA;
+ return ret;
+}
+
#else
/* Enumerates the IP addresses in the system using SIOCGIFCONF, returning
@@ -886,78 +949,13 @@ DWORD getIPAddrTable(PMIB_IPADDRTABLE *ppIpAddrTable, HANDLE heap, DWORD flags)
return ret;
}
-#endif
-
-#ifdef HAVE_IFADDRS_H
-ULONG v6addressesFromIndex(DWORD index, SOCKET_ADDRESS **addrs, ULONG *num_addrs)
-{
- struct ifaddrs *ifa;
- ULONG ret;
-
- if (!getifaddrs(&ifa))
- {
- struct ifaddrs *p;
- ULONG n;
- char name[IFNAMSIZ];
-
- getInterfaceNameByIndex(index, name);
- for (p = ifa, n = 0; p; p = p->ifa_next)
- if (p->ifa_addr && p->ifa_addr->sa_family == AF_INET6 &&
- !strcmp(name, p->ifa_name))
- n++;
- if (n)
- {
- *addrs = HeapAlloc(GetProcessHeap(), 0, n * (sizeof(SOCKET_ADDRESS) +
- sizeof(struct WS_sockaddr_in6)));
- if (*addrs)
- {
- struct WS_sockaddr_in6 *next_addr = (struct WS_sockaddr_in6 *)(
- (BYTE *)*addrs + n * sizeof(SOCKET_ADDRESS));
-
- for (p = ifa, n = 0; p; p = p->ifa_next)
- {
- if (p->ifa_addr && p->ifa_addr->sa_family == AF_INET6 &&
- !strcmp(name, p->ifa_name))
- {
- struct sockaddr_in6 *addr = (struct sockaddr_in6 *)p->ifa_addr;
-
- next_addr->sin6_family = WS_AF_INET6;
- next_addr->sin6_port = addr->sin6_port;
- next_addr->sin6_flowinfo = addr->sin6_flowinfo;
- memcpy(&next_addr->sin6_addr, &addr->sin6_addr,
- sizeof(next_addr->sin6_addr));
- next_addr->sin6_scope_id = addr->sin6_scope_id;
- (*addrs)[n].lpSockaddr = (LPSOCKADDR)next_addr;
- (*addrs)[n].iSockaddrLength = sizeof(struct WS_sockaddr_in6);
- next_addr++;
- n++;
- }
- }
- *num_addrs = n;
- ret = ERROR_SUCCESS;
- }
- else
- ret = ERROR_OUTOFMEMORY;
- }
- else
- {
- *addrs = NULL;
- *num_addrs = 0;
- ret = ERROR_SUCCESS;
- }
- freeifaddrs(ifa);
- }
- else
- ret = ERROR_NO_DATA;
- return ret;
-}
-#else
ULONG v6addressesFromIndex(DWORD index, SOCKET_ADDRESS **addrs, ULONG *num_addrs)
{
*addrs = NULL;
*num_addrs = 0;
return ERROR_SUCCESS;
}
+
#endif
char *toIPAddressString(unsigned int addr, char string[16])
More information about the wine-cvs
mailing list