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