[PATCH] Use FADF_HAVEVARTYPE before FADF_RECORD for safearrays
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Thu Mar 18 04:30:08 CDT 2010
---
dlls/oleaut32/safearray.c | 66 ++++++++++++++++++++++----------------------
1 files changed, 33 insertions(+), 33 deletions(-)
diff --git a/dlls/oleaut32/safearray.c b/dlls/oleaut32/safearray.c
index f8f87eb..88c5972 100644
--- a/dlls/oleaut32/safearray.c
+++ b/dlls/oleaut32/safearray.c
@@ -293,21 +293,6 @@ static HRESULT SAFEARRAY_DestroyData(SAFEARRAY *psa, ULONG ulStartCell)
lpUnknown++;
}
}
- else if (psa->fFeatures & (FADF_RECORD))
- {
- IRecordInfo *lpRecInfo;
-
- if (SUCCEEDED(SafeArrayGetRecordInfo(psa, &lpRecInfo)))
- {
- PBYTE pRecordData = psa->pvData;
- while(ulCellCount--)
- {
- IRecordInfo_RecordClear(lpRecInfo, pRecordData);
- pRecordData += psa->cbElements;
- }
- IRecordInfo_Release(lpRecInfo);
- }
- }
else if (psa->fFeatures & FADF_BSTR)
{
BSTR* lpBstr = (BSTR*)psa->pvData + ulStartCell;
@@ -330,6 +315,21 @@ static HRESULT SAFEARRAY_DestroyData(SAFEARRAY *psa, ULONG ulStartCell)
lpVariant++;
}
}
+ else if (psa->fFeatures & (FADF_RECORD))
+ {
+ IRecordInfo *lpRecInfo;
+
+ if (SUCCEEDED(SafeArrayGetRecordInfo(psa, &lpRecInfo)))
+ {
+ PBYTE pRecordData = psa->pvData;
+ while(ulCellCount--)
+ {
+ IRecordInfo_RecordClear(lpRecInfo, pRecordData);
+ pRecordData += psa->cbElements;
+ }
+ IRecordInfo_Release(lpRecInfo);
+ }
+ }
}
return S_OK;
}
@@ -400,7 +400,17 @@ static HRESULT SAFEARRAY_CopyData(SAFEARRAY *psa, SAFEARRAY *dest)
}
}
- if (psa->fFeatures & FADF_RECORD)
+ if (psa->fFeatures & FADF_HAVEVARTYPE)
+ {
+ SAFEARRAY_SetHiddenDWORD(dest, SAFEARRAY_GetHiddenDWORD(psa));
+ }
+ else if (psa->fFeatures & FADF_HAVEIID)
+ {
+ GUID guid;
+ SafeArrayGetIID(psa, &guid);
+ SafeArraySetIID(dest, &guid);
+ }
+ else if (psa->fFeatures & FADF_RECORD)
{
IRecordInfo* pRecInfo = NULL;
@@ -413,16 +423,6 @@ static HRESULT SAFEARRAY_CopyData(SAFEARRAY *psa, SAFEARRAY *dest)
IRecordInfo_Release(pRecInfo);
}
}
- else if (psa->fFeatures & FADF_HAVEIID)
- {
- GUID guid;
- SafeArrayGetIID(psa, &guid);
- SafeArraySetIID(dest, &guid);
- }
- else if (psa->fFeatures & FADF_HAVEVARTYPE)
- {
- SAFEARRAY_SetHiddenDWORD(dest, SAFEARRAY_GetHiddenDWORD(psa));
- }
}
return S_OK;
}
@@ -731,7 +731,7 @@ HRESULT WINAPI SafeArrayDestroyDescriptor(SAFEARRAY *psa)
if (psa->cLocks)
return DISP_E_ARRAYISLOCKED; /* Can't destroy a locked array */
- if (psa->fFeatures & FADF_RECORD)
+ if (psa->fFeatures & FADF_RECORD && !(psa->fFeatures & FADF_HAVEVARTYPE))
SafeArraySetRecordInfo(psa, NULL);
if (psa->fFeatures & FADF_CREATEVECTOR &&
@@ -1496,17 +1496,17 @@ HRESULT WINAPI SafeArrayGetVartype(SAFEARRAY* psa, VARTYPE* pvt)
if (!psa || !pvt)
return E_INVALIDARG;
- if (psa->fFeatures & FADF_RECORD)
+ if (psa->fFeatures & FADF_HAVEVARTYPE)
+ {
+ VARTYPE vt = SAFEARRAY_GetHiddenDWORD(psa);
+ *pvt = vt;
+ }
+ else if (psa->fFeatures & FADF_RECORD)
*pvt = VT_RECORD;
else if ((psa->fFeatures & (FADF_HAVEIID|FADF_DISPATCH)) == (FADF_HAVEIID|FADF_DISPATCH))
*pvt = VT_DISPATCH;
else if (psa->fFeatures & FADF_HAVEIID)
*pvt = VT_UNKNOWN;
- else if (psa->fFeatures & FADF_HAVEVARTYPE)
- {
- VARTYPE vt = SAFEARRAY_GetHiddenDWORD(psa);
- *pvt = vt;
- }
else
return E_INVALIDARG;
--
1.6.2.5
--------------000209020801070400040305--
More information about the wine-patches
mailing list