[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