Nikolay Sivov : oleaut32: Propagate return codes properly.
Module: wine Branch: master Commit: 4c02dc867f4c56551605bfb646b29d1f30b3e1bb URL: http://source.winehq.org/git/wine.git/?a=commit;h=4c02dc867f4c56551605bfb646... Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Tue Feb 25 08:42:49 2014 +0400 oleaut32: Propagate return codes properly. --- dlls/oleaut32/safearray.c | 64 ++++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/dlls/oleaut32/safearray.c b/dlls/oleaut32/safearray.c index 4801f3b..080921e 100644 --- a/dlls/oleaut32/safearray.c +++ b/dlls/oleaut32/safearray.c @@ -186,7 +186,7 @@ static HRESULT SAFEARRAY_AllocDescriptor(ULONG ulSize, SAFEARRAY **ppsaOut) if (!ptr) { *ppsaOut = NULL; - return E_UNEXPECTED; + return E_OUTOFMEMORY; } *ppsaOut = (SAFEARRAY*)(ptr + SAFEARRAY_HIDDEN_SIZE); @@ -478,6 +478,7 @@ static HRESULT SAFEARRAY_CopyData(SAFEARRAY *psa, SAFEARRAY *dest) HRESULT WINAPI SafeArrayAllocDescriptor(UINT cDims, SAFEARRAY **ppsaOut) { LONG allocSize; + HRESULT hr; TRACE("(%d,%p)\n", cDims, ppsaOut); @@ -490,8 +491,9 @@ HRESULT WINAPI SafeArrayAllocDescriptor(UINT cDims, SAFEARRAY **ppsaOut) /* We need enough space for the header and its bounds */ allocSize = sizeof(SAFEARRAY) + sizeof(SAFEARRAYBOUND) * (cDims - 1); - if (FAILED(SAFEARRAY_AllocDescriptor(allocSize, ppsaOut))) - return E_UNEXPECTED; + hr = SAFEARRAY_AllocDescriptor(allocSize, ppsaOut); + if (FAILED(hr)) + return hr; (*ppsaOut)->cDims = cDims; @@ -521,7 +523,7 @@ HRESULT WINAPI SafeArrayAllocDescriptor(UINT cDims, SAFEARRAY **ppsaOut) HRESULT WINAPI SafeArrayAllocDescriptorEx(VARTYPE vt, UINT cDims, SAFEARRAY **ppsaOut) { ULONG cbElements; - HRESULT hRet = E_UNEXPECTED; + HRESULT hRet; TRACE("(%d->%s,%d,%p)\n", vt, debugstr_vt(vt), cDims, ppsaOut); @@ -1129,18 +1131,17 @@ UINT WINAPI SafeArrayGetElemsize(SAFEARRAY *psa) */ HRESULT WINAPI SafeArrayAccessData(SAFEARRAY *psa, void **ppvData) { + HRESULT hr; + TRACE("(%p,%p)\n", psa, ppvData); if(!psa || !ppvData) return E_INVALIDARG; - if (SUCCEEDED(SafeArrayLock(psa))) - { - *ppvData = psa->pvData; - return S_OK; - } - *ppvData = NULL; - return E_UNEXPECTED; + hr = SafeArrayLock(psa); + *ppvData = SUCCEEDED(hr) ? psa->pvData : NULL; + + return hr; } @@ -1249,6 +1250,8 @@ HRESULT WINAPI SafeArrayPtrOfIndex(SAFEARRAY *psa, LONG *rgIndices, void **ppvDa */ HRESULT WINAPI SafeArrayDestroyData(SAFEARRAY *psa) { + HRESULT hr; + TRACE("(%p)\n", psa); if (!psa) @@ -1258,8 +1261,9 @@ HRESULT WINAPI SafeArrayDestroyData(SAFEARRAY *psa) return DISP_E_ARRAYISLOCKED; /* Can't delete a locked array */ /* Delete the actual item data */ - if (FAILED(SAFEARRAY_DestroyData(psa, 0))) - return E_UNEXPECTED; + hr = SAFEARRAY_DestroyData(psa, 0); + if (FAILED(hr)) + return hr; if (psa->pvData) { @@ -1388,9 +1392,9 @@ HRESULT WINAPI SafeArrayCopy(SAFEARRAY *psa, SAFEARRAY **ppsaOut) if (psa->fFeatures & (FADF_RECORD|FADF_HAVEIID|FADF_HAVEVARTYPE)) { VARTYPE vt; - if (FAILED(SafeArrayGetVartype(psa, &vt))) - hRet = E_UNEXPECTED; - else + + hRet = SafeArrayGetVartype(psa, &vt); + if (SUCCEEDED(hRet)) hRet = SafeArrayAllocDescriptorEx(vt, psa->cDims, ppsaOut); } else @@ -1409,19 +1413,23 @@ HRESULT WINAPI SafeArrayCopy(SAFEARRAY *psa, SAFEARRAY **ppsaOut) memcpy((*ppsaOut)->rgsabound, psa->rgsabound, psa->cDims * sizeof(SAFEARRAYBOUND)); (*ppsaOut)->pvData = SAFEARRAY_Malloc(SAFEARRAY_GetCellCount(psa) * psa->cbElements); - - if ((*ppsaOut)->pvData) + if (!(*ppsaOut)->pvData) { - hRet = SAFEARRAY_CopyData(psa, *ppsaOut); - - if (SUCCEEDED(hRet)) - return hRet; + SafeArrayDestroyDescriptor(*ppsaOut); + *ppsaOut = NULL; + return E_OUTOFMEMORY; + } + hRet = SAFEARRAY_CopyData(psa, *ppsaOut); + if (FAILED(hRet)) + { SAFEARRAY_Free((*ppsaOut)->pvData); + SafeArrayDestroyDescriptor(*ppsaOut); + *ppsaOut = NULL; + return hRet; } - SafeArrayDestroyDescriptor(*ppsaOut); } - *ppsaOut = NULL; + return hRet; } @@ -1444,6 +1452,7 @@ HRESULT WINAPI SafeArrayCopy(SAFEARRAY *psa, SAFEARRAY **ppsaOut) HRESULT WINAPI SafeArrayRedim(SAFEARRAY *psa, SAFEARRAYBOUND *psabound) { SAFEARRAYBOUND *oldBounds; + HRESULT hr; TRACE("(%p,%p)\n", psa, psabound); @@ -1453,8 +1462,9 @@ HRESULT WINAPI SafeArrayRedim(SAFEARRAY *psa, SAFEARRAYBOUND *psabound) if (psa->cLocks > 0) return DISP_E_ARRAYISLOCKED; - if (FAILED(SafeArrayLock(psa))) - return E_UNEXPECTED; + hr = SafeArrayLock(psa); + if (FAILED(hr)) + return hr; oldBounds = psa->rgsabound; oldBounds->lLbound = psabound->lLbound; @@ -1487,7 +1497,7 @@ HRESULT WINAPI SafeArrayRedim(SAFEARRAY *psa, SAFEARRAYBOUND *psabound) if (!(pvNewData = SAFEARRAY_Malloc(ulNewSize))) { SafeArrayUnlock(psa); - return E_UNEXPECTED; + return E_OUTOFMEMORY; } memcpy(pvNewData, psa->pvData, ulOldSize);
participants (1)
-
Alexandre Julliard