Jacek Caban : oleaut32: Return missing function custom data as VT_EMPTY.

Alexandre Julliard julliard at winehq.org
Mon Feb 10 16:32:45 CST 2020


Module: wine
Branch: master
Commit: cdb72b091eec4075cbf2a95732237a069e612c09
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=cdb72b091eec4075cbf2a95732237a069e612c09

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Feb 10 14:56:58 2020 +0100

oleaut32: Return missing function custom data as VT_EMPTY.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/oleaut32/tests/typelib.c | 24 ++++++++++++++++++++++++
 dlls/oleaut32/typelib.c       | 11 +++--------
 2 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c
index 79861dd46f..e8956fb3b1 100644
--- a/dlls/oleaut32/tests/typelib.c
+++ b/dlls/oleaut32/tests/typelib.c
@@ -4798,13 +4798,17 @@ static void test_dump_typelib(const WCHAR *name)
 {
     ITypeLib *typelib;
     int ticount = ARRAY_SIZE(info);
+    CUSTDATA cust_data;
     int iface, func;
+    VARIANT v;
+    HRESULT hr;
 
     ole_check(LoadTypeLibEx(name, REGKIND_NONE, &typelib));
     expect_eq(ITypeLib_GetTypeInfoCount(typelib), ticount, UINT, "%d");
     for (iface = 0; iface < ticount; iface++)
     {
         const type_info *ti = &info[iface];
+        ITypeInfo2 *typeinfo2;
         ITypeInfo *typeinfo;
         TYPEATTR *typeattr;
         BSTR bstrIfName;
@@ -4845,6 +4849,9 @@ static void test_dump_typelib(const WCHAR *name)
             if (hr == S_OK) ITypeInfo_Release(typeinfo2);
         }
 
+        hr = ITypeInfo_QueryInterface(typeinfo, &IID_ITypeInfo2, (void**)&typeinfo2);
+        ok(hr == S_OK, "Could not get ITypeInfo2: %08x\n", hr);
+
         for (func = 0; func < typeattr->cFuncs; func++)
         {
             const function_info *fn_info = &ti->funcs[func];
@@ -4893,10 +4900,27 @@ static void test_dump_typelib(const WCHAR *name)
             }
             expect_int(fn_info->params[desc->cParams].vt, (VARTYPE)-1);
 
+            V_VT(&v) = VT_ERROR;
+            hr = ITypeInfo2_GetFuncCustData(typeinfo2, func, &IID_NULL, &v);
+            ok(hr == S_OK, "GetFuncCustData failed: %08x\n", hr);
+            ok(V_VT(&v) == VT_EMPTY, "V_VT(&v) = %d\n", V_VT(&v));
+            VariantClear(&v);
+
+            V_VT(&v) = VT_ERROR;
+            hr = ITypeInfo2_GetFuncCustData(typeinfo2, func, &IID_IBaseIface, &v);
+            ok(hr == S_OK, "GetFuncCustData failed: %08x\n", hr);
+            ok(V_VT(&v) == VT_EMPTY, "V_VT(&v) = %d\n", V_VT(&v));
+            VariantClear(&v);
+
+            memset(&cust_data, 0, sizeof(cust_data));
+            hr = ITypeInfo2_GetAllCustData(typeinfo2, &cust_data);
             ITypeInfo_ReleaseFuncDesc(typeinfo, desc);
+            ClearCustData(&cust_data);
         }
 
         ITypeInfo_ReleaseTypeAttr(typeinfo, typeattr);
+
+        ITypeInfo2_Release(typeinfo2);
         ITypeInfo_Release(typeinfo);
     }
     ITypeLib_Release(typelib);
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index 6375dc3de0..7020f68ba7 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -8387,8 +8387,8 @@ static HRESULT WINAPI ITypeInfo2_fnGetFuncCustData(
 	VARIANT *pVarVal)
 {
     ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);
-    TLBCustData *pCData;
     const TLBFuncDesc *desc;
+    TLBCustData *data;
     UINT hrefoffset;
     HRESULT hr;
 
@@ -8401,14 +8401,9 @@ static HRESULT WINAPI ITypeInfo2_fnGetFuncCustData(
         return hr;
     }
 
-    pCData = TLB_get_custdata_by_guid(&desc->custdata_list, guid);
-    if(!pCData)
-        return TYPE_E_ELEMENTNOTFOUND;
-
     VariantInit(pVarVal);
-    VariantCopy(pVarVal, &pCData->data);
-
-    return S_OK;
+    data = TLB_get_custdata_by_guid(&desc->custdata_list, guid);
+    return data ? VariantCopy(pVarVal, &data->data) : S_OK;
 }
 
 /* ITypeInfo2::GetParamCustData




More information about the wine-cvs mailing list