Module: wine Branch: master Commit: cfbac8d2ed4b79b42952e9cc99f656cfe967088a URL: http://source.winehq.org/git/wine.git/?a=commit;h=cfbac8d2ed4b79b42952e9cc99...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Thu Jan 14 23:34:17 2016 +0300
ole2disp: Implement SafeArrayAccessData()/SafeArrayUnaccessData().
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ole2disp.dll16/ole2disp.c | 43 +++++++++++++++++++++++++++++---- dlls/ole2disp.dll16/ole2disp.dll16.spec | 4 +-- 2 files changed, 40 insertions(+), 7 deletions(-)
diff --git a/dlls/ole2disp.dll16/ole2disp.c b/dlls/ole2disp.dll16/ole2disp.c index af6f03c..d61b5e8 100644 --- a/dlls/ole2disp.dll16/ole2disp.c +++ b/dlls/ole2disp.dll16/ole2disp.c @@ -89,6 +89,15 @@ static ULONG safearray_getcellcount(const SAFEARRAY16 *sa) return cells; }
+static HRESULT safearray_lock(SAFEARRAY16 *sa) +{ + if (sa->cLocks == 0xffff) + return E_UNEXPECTED; + + sa->cLocks++; + return S_OK; +} + /****************************************************************************** * SafeArrayGetDim [OLE2DISP.17] */ @@ -117,11 +126,7 @@ HRESULT WINAPI SafeArrayLock16(SAFEARRAY16 *sa) if (!sa) return E_INVALIDARG16;
- if (sa->cLocks == 0xffff) - return E_UNEXPECTED; - - sa->cLocks++; - return S_OK; + return safearray_lock(sa); }
/****************************************************************************** @@ -142,6 +147,34 @@ HRESULT WINAPI SafeArrayUnlock16(SAFEARRAY16 *sa) }
/****************************************************************************** + * SafeArrayAccessData [OLE2DISP.23] + */ +HRESULT WINAPI SafeArrayAccessData16(SAFEARRAY16 *sa, SEGPTR *data) +{ + HRESULT hr; + + TRACE("(%p, %p)\n", sa, data); + + /* arguments are not tested, it crashes if any of them is NULL */ + + hr = safearray_lock(sa); + if (FAILED(hr)) + return hr; + + *data = sa->pvData; + return S_OK; +} + +/****************************************************************************** + * SafeArrayUnaccessData [OLE2DISP.24] + */ +HRESULT WINAPI SafeArrayUnaccessData16(SAFEARRAY16 *sa) +{ + TRACE("(%p)\n", sa); + return SafeArrayUnlock16(sa); +} + +/****************************************************************************** * SafeArrayAllocDescriptor [OLE2DISP.38] */ HRESULT WINAPI SafeArrayAllocDescriptor16(UINT16 dims, SEGPTR *ret) diff --git a/dlls/ole2disp.dll16/ole2disp.dll16.spec b/dlls/ole2disp.dll16/ole2disp.dll16.spec index b0db920..4ee52e1 100644 --- a/dlls/ole2disp.dll16/ole2disp.dll16.spec +++ b/dlls/ole2disp.dll16/ole2disp.dll16.spec @@ -20,8 +20,8 @@ 20 stub SAFEARRAYGETLBOUND 21 pascal SafeArrayLock(ptr) SafeArrayLock16 22 pascal SafeArrayUnlock(ptr) SafeArrayUnlock16 -23 stub SAFEARRAYACCESSDATA -24 stub SAFEARRAYUNACCESSDATA +23 pascal SafeArrayAccessData(ptr ptr) SafeArrayAccessData16 +24 pascal SafeArrayUnaccessData(ptr) SafeArrayUnaccessData16 25 stub SAFEARRAYGETELEMENT 26 stub SAFEARRAYPUTELEMENT 27 stub SAFEARRAYCOPY