[2/3] dpnet: Return valid value from IDirectPlay8Address GetNumComponents

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Sun Jan 19 21:06:27 CST 2014


Hi,

Changelog:
       dpnet: Return valid value from IDirectPlay8Address GetNumComponents


Best Regards
   Alistair Leslie-Hughes
-------------- next part --------------
>From 010c361c781327a60d6440c70010582cbd6c3e41 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date: Mon, 20 Jan 2014 12:02:25 +1100
Subject: [PATCH] Return valid value from IDirectPlay8Address GetNumComponents
To: wine-patches <wine-patches at winehq.org>

---
 dlls/dpnet/address.c       | 13 ++++++++++---
 dlls/dpnet/tests/address.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 55 insertions(+), 3 deletions(-)

diff --git a/dlls/dpnet/address.c b/dlls/dpnet/address.c
index d12ef01..e7a62bb 100644
--- a/dlls/dpnet/address.c
+++ b/dlls/dpnet/address.c
@@ -215,9 +215,16 @@ static HRESULT WINAPI IDirectPlay8AddressImpl_SetUserData(IDirectPlay8Address *i
 static HRESULT WINAPI IDirectPlay8AddressImpl_GetNumComponents(IDirectPlay8Address *iface,
         DWORD *pdwNumComponents)
 {
-  IDirectPlay8AddressImpl *This = impl_from_IDirectPlay8Address(iface);
-  TRACE("(%p): stub\n", This);
-  return DPN_OK; 
+    IDirectPlay8AddressImpl *This = impl_from_IDirectPlay8Address(iface);
+    TRACE("(%p): stub\n", This);
+
+    if(!pdwNumComponents)
+        return DPNERR_INVALIDPOINTER;
+
+    FIXME("Always returning 0\n");
+    *pdwNumComponents = 0;
+
+    return DPN_OK;
 }
 
 static HRESULT WINAPI IDirectPlay8AddressImpl_GetComponentByName(IDirectPlay8Address *iface,
diff --git a/dlls/dpnet/tests/address.c b/dlls/dpnet/tests/address.c
index 3baf50a..bf68fbb 100644
--- a/dlls/dpnet/tests/address.c
+++ b/dlls/dpnet/tests/address.c
@@ -44,6 +44,8 @@ static void create_directplay_address(void)
     if( SUCCEEDED(hr)  )
     {
         GUID guidsp;
+        DWORD components;
+        DWORD i;
 
         hr = IDirectPlay8Address_GetSP(localaddr, NULL);
         ok(hr == DPNERR_INVALIDPOINTER, "GetSP failed 0x%08x\n", hr);
@@ -61,6 +63,49 @@ static void create_directplay_address(void)
         ok(hr == S_OK, "got 0x%08x\n", hr);
         ok(IsEqualGUID(&guidsp, &CLSID_DP8SP_TCPIP), "wrong guid: %s\n", show_guid(&guidsp));
 
+        hr = IDirectPlay8Address_GetNumComponents(localaddr, NULL);
+        ok(hr == DPNERR_INVALIDPOINTER, "got 0x%08x\n", hr);
+
+        hr = IDirectPlay8Address_GetNumComponents(localaddr, &components);
+        ok(hr == S_OK, "got 0x%08x\n", hr);
+
+        trace("GetNumComponents=%d\n", components);
+        for(i=0; i < components; i++)
+        {
+            /* For most cases, 256 will be enough for testing. */
+            WCHAR name[256];
+            DWORD namelen = 256;
+            void *buffer = malloc(256);
+            DWORD bufflen = 256;
+            DWORD type;
+
+            hr = IDirectPlay8Address_GetComponentByIndex(localaddr, i, name, &namelen, buffer, &bufflen, &type);
+            ok(hr == S_OK, "got 0x%08x\n", hr);
+            if(hr == S_OK)
+            {
+                switch(type)
+                {
+                    case DPNA_DATATYPE_STRING:
+                        trace("%d: %s: %s\n", i, wine_dbgstr_w(name), wine_dbgstr_w(buffer));
+                        break;
+                    case DPNA_DATATYPE_DWORD:
+                        trace("%d: %s: %d\n", i, wine_dbgstr_w(name), *(DWORD*)&buffer);
+                        break;
+                    case DPNA_DATATYPE_GUID:
+                        trace("%d: %s: %s\n", i, wine_dbgstr_w(name), show_guid( (GUID*)&buffer));
+                        break;
+                    case DPNA_DATATYPE_BINARY:
+                        trace("%d: %s: Binary Data %d\n", i, wine_dbgstr_w(name),  bufflen);
+                        break;
+                    default:
+                        trace(" Unknown\n");
+                        break;
+                }
+            }
+
+            free(buffer);
+        }
+
         IDirectPlay8Address_Release(localaddr);
     }
 }
-- 
1.8.3.2



More information about the wine-patches mailing list