Commit cfbac8d2 authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

ole2disp: Implement SafeArrayAccessData()/SafeArrayUnaccessData().

parent 668e9754
...@@ -89,6 +89,15 @@ static ULONG safearray_getcellcount(const SAFEARRAY16 *sa) ...@@ -89,6 +89,15 @@ static ULONG safearray_getcellcount(const SAFEARRAY16 *sa)
return cells; return cells;
} }
static HRESULT safearray_lock(SAFEARRAY16 *sa)
{
if (sa->cLocks == 0xffff)
return E_UNEXPECTED;
sa->cLocks++;
return S_OK;
}
/****************************************************************************** /******************************************************************************
* SafeArrayGetDim [OLE2DISP.17] * SafeArrayGetDim [OLE2DISP.17]
*/ */
...@@ -117,11 +126,7 @@ HRESULT WINAPI SafeArrayLock16(SAFEARRAY16 *sa) ...@@ -117,11 +126,7 @@ HRESULT WINAPI SafeArrayLock16(SAFEARRAY16 *sa)
if (!sa) if (!sa)
return E_INVALIDARG16; return E_INVALIDARG16;
if (sa->cLocks == 0xffff) return safearray_lock(sa);
return E_UNEXPECTED;
sa->cLocks++;
return S_OK;
} }
/****************************************************************************** /******************************************************************************
...@@ -142,6 +147,34 @@ HRESULT WINAPI SafeArrayUnlock16(SAFEARRAY16 *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] * SafeArrayAllocDescriptor [OLE2DISP.38]
*/ */
HRESULT WINAPI SafeArrayAllocDescriptor16(UINT16 dims, SEGPTR *ret) HRESULT WINAPI SafeArrayAllocDescriptor16(UINT16 dims, SEGPTR *ret)
......
...@@ -20,8 +20,8 @@ ...@@ -20,8 +20,8 @@
20 stub SAFEARRAYGETLBOUND 20 stub SAFEARRAYGETLBOUND
21 pascal SafeArrayLock(ptr) SafeArrayLock16 21 pascal SafeArrayLock(ptr) SafeArrayLock16
22 pascal SafeArrayUnlock(ptr) SafeArrayUnlock16 22 pascal SafeArrayUnlock(ptr) SafeArrayUnlock16
23 stub SAFEARRAYACCESSDATA 23 pascal SafeArrayAccessData(ptr ptr) SafeArrayAccessData16
24 stub SAFEARRAYUNACCESSDATA 24 pascal SafeArrayUnaccessData(ptr) SafeArrayUnaccessData16
25 stub SAFEARRAYGETELEMENT 25 stub SAFEARRAYGETELEMENT
26 stub SAFEARRAYPUTELEMENT 26 stub SAFEARRAYPUTELEMENT
27 stub SAFEARRAYCOPY 27 stub SAFEARRAYCOPY
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment