Andrew Nguyen : mapi32/tests: Invoke MAPIInitialize before performing the FPropContainsProp tests.

Alexandre Julliard julliard at winehq.org
Mon Feb 1 08:56:00 CST 2010


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

Author: Andrew Nguyen <arethusa26 at gmail.com>
Date:   Sat Jan 30 18:58:11 2010 -0600

mapi32/tests: Invoke MAPIInitialize before performing the FPropContainsProp tests.

This avoids crashes with the native Outlook extended MAPI provider.

---

 dlls/mapi32/tests/prop.c |   25 +++++++++++++++++++++----
 1 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/dlls/mapi32/tests/prop.c b/dlls/mapi32/tests/prop.c
index 8c64245..15d6d98 100644
--- a/dlls/mapi32/tests/prop.c
+++ b/dlls/mapi32/tests/prop.c
@@ -32,6 +32,7 @@
 static HMODULE hMapi32 = 0;
 
 static SCODE        (WINAPI *pScInitMapiUtil)(ULONG);
+static void         (WINAPI *pDeinitMapiUtil)(void);
 static SCODE        (WINAPI *pPropCopyMore)(LPSPropValue,LPSPropValue,ALLOCATEMORE*,LPVOID);
 static ULONG        (WINAPI *pUlPropSize)(LPSPropValue);
 static BOOL         (WINAPI *pFPropContainsProp)(LPSPropValue,LPSPropValue,ULONG);
@@ -53,7 +54,9 @@ static SCODE        (WINAPI *pCreateIProp)(LPCIID,ALLOCATEBUFFER*,ALLOCATEMORE*,
                                            FREEBUFFER*,LPVOID,LPPROPDATA*);
 static SCODE        (WINAPI *pMAPIAllocateBuffer)(ULONG, LPVOID);
 static SCODE        (WINAPI *pMAPIAllocateMore)(ULONG, LPVOID, LPVOID);
+static SCODE        (WINAPI *pMAPIInitialize)(LPVOID);
 static SCODE        (WINAPI *pMAPIFreeBuffer)(LPVOID);
+static void         (WINAPI *pMAPIUninitialize)(void);
 
 static BOOL InitFuncPtrs(void)
 {
@@ -79,13 +82,15 @@ static BOOL InitFuncPtrs(void)
     pCreateIProp = (void*)GetProcAddress(hMapi32, "CreateIProp at 24");
 
     pScInitMapiUtil = (void*)GetProcAddress(hMapi32, "ScInitMapiUtil at 4");
+    pDeinitMapiUtil = (void*)GetProcAddress(hMapi32, "DeinitMapiUtil at 0");
     pMAPIAllocateBuffer = (void*)GetProcAddress(hMapi32, "MAPIAllocateBuffer");
     pMAPIAllocateMore = (void*)GetProcAddress(hMapi32, "MAPIAllocateMore");
     pMAPIFreeBuffer = (void*)GetProcAddress(hMapi32, "MAPIFreeBuffer");
-    if(pScInitMapiUtil && pMAPIAllocateBuffer && pMAPIAllocateMore && pMAPIFreeBuffer)
-        return TRUE;
-    else
-        return FALSE;
+    pMAPIInitialize = (void*)GetProcAddress(hMapi32, "MAPIInitialize");
+    pMAPIUninitialize = (void*)GetProcAddress(hMapi32, "MAPIUninitialize");
+
+    return pMAPIAllocateBuffer && pMAPIAllocateMore && pMAPIFreeBuffer &&
+           pScInitMapiUtil && pDeinitMapiUtil;
 }
 
 /* FIXME: Test PT_I2, PT_I4, PT_R4, PT_R8, PT_CURRENCY, PT_APPTIME, PT_SYSTIME,
@@ -1441,7 +1446,17 @@ START_TEST(prop)
 
     test_PropCopyMore();
     test_UlPropSize();
+
+    /* We call MAPIInitialize here for the benefit of native extended MAPI
+     * providers which crash in the FPropContainsProp tests when MAPIInitialize
+     * has not been called. Since MAPIInitialize is irrelevant for FPropContainsProp
+     * on Wine, we do not care whether MAPIInitialize succeeds. */
+    if (pMAPIInitialize)
+        ret = pMAPIInitialize(NULL);
     test_FPropContainsProp();
+    if (pMAPIUninitialize && ret == S_OK)
+        pMAPIUninitialize();
+
     test_FPropCompareProp();
     test_LPropCompareProp();
     test_PpropFindProp();
@@ -1457,5 +1472,7 @@ START_TEST(prop)
     test_FBadColumnSet();
 
     test_IProp();
+
+    pDeinitMapiUtil();
     FreeLibrary(hMapi32);
 }




More information about the wine-cvs mailing list