Bruno Jesus : iphlpapi: Set 0.0.0.0 as the IP and mask of disconnected interfaces.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Jan 16 14:12:31 CST 2015


Module: wine
Branch: master
Commit: 317fd11e85157e0b9eaca1d001914706072d3f7f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=317fd11e85157e0b9eaca1d001914706072d3f7f

Author: Bruno Jesus <00cpxxx at gmail.com>
Date:   Thu Jan 15 10:13:34 2015 -0200

iphlpapi: Set 0.0.0.0 as the IP and mask of disconnected interfaces.

---

 dlls/iphlpapi/iphlpapi_main.c  |  6 ++++++
 dlls/iphlpapi/tests/iphlpapi.c | 10 +++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/dlls/iphlpapi/iphlpapi_main.c b/dlls/iphlpapi/iphlpapi_main.c
index 59f3593..d2f36fe 100644
--- a/dlls/iphlpapi/iphlpapi_main.c
+++ b/dlls/iphlpapi/iphlpapi_main.c
@@ -604,6 +604,12 @@ DWORD WINAPI GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen)
                   }
                 }
               }
+              /* If no IP was found it probably means that the interface is not
+               * configured. In this case we have to return a zeroed IP and mask. */
+              if (firstIPAddr) {
+                strcpy(ptr->IpAddressList.IpAddress.String, "0.0.0.0");
+                strcpy(ptr->IpAddressList.IpMask.String, "0.0.0.0");
+              }
               /* Find first router through this interface, which we'll assume
                * is the default gateway for this adapter */
               for (i = 0; i < routeTable->dwNumEntries; i++)
diff --git a/dlls/iphlpapi/tests/iphlpapi.c b/dlls/iphlpapi/tests/iphlpapi.c
index b2d81c0..14bbc5d 100644
--- a/dlls/iphlpapi/tests/iphlpapi.c
+++ b/dlls/iphlpapi/tests/iphlpapi.c
@@ -1118,12 +1118,20 @@ static void testGetAdaptersInfo(void)
     if (apiReturn == ERROR_NO_DATA)
       ; /* no adapter's, that's okay */
     else if (apiReturn == ERROR_BUFFER_OVERFLOW) {
-      PIP_ADAPTER_INFO buf = HeapAlloc(GetProcessHeap(), 0, len);
+      PIP_ADAPTER_INFO ptr, buf = HeapAlloc(GetProcessHeap(), 0, len);
 
       apiReturn = pGetAdaptersInfo(buf, &len);
       ok(apiReturn == NO_ERROR,
        "GetAdaptersInfo(buf, &dwSize) returned %d, expected NO_ERROR\n",
        apiReturn);
+      ptr = buf;
+      while (ptr) {
+        ok(ptr->IpAddressList.IpAddress.String[0], "A valid IP must be present\n");
+        ok(ptr->IpAddressList.IpMask.String[0], "A valid mask must be present\n");
+        trace("Adapter '%s', IP %s, Mask %s\n", ptr->AdapterName,
+              ptr->IpAddressList.IpAddress.String, ptr->IpAddressList.IpMask.String);
+        ptr = ptr->Next;
+      }
       HeapFree(GetProcessHeap(), 0, buf);
     }
   }




More information about the wine-cvs mailing list