[Libreoffice-commits] .: Branch 'libreoffice-3-4' - 2 commits - extensions/source

Noel Power noelp at kemper.freedesktop.org
Thu Feb 23 07:50:28 PST 2012


 extensions/source/ole/unoconversionutilities.hxx |   67 ++++++++---------------
 1 file changed, 26 insertions(+), 41 deletions(-)

New commits:
commit 21f1ed4c20b6409037ac215ec96abcacd581660e
Author: Joachim Lingner <jl at openoffice.org>
Date:   Thu Feb 23 15:47:49 2012 +0000

    default conversion of sequences is now again SAFEARRAY of VARIANTs #fdo46165
    
    cws jl166 patch: #i117010# default conversion of sequences is now again SAFEARRAY of VARIANTs
    
    Signed-off-by: Michael Meeks <michael.meeks at suse.com>

diff --git a/extensions/source/ole/unoconversionutilities.hxx b/extensions/source/ole/unoconversionutilities.hxx
index 328fec4..df2e402 100644
--- a/extensions/source/ole/unoconversionutilities.hxx
+++ b/extensions/source/ole/unoconversionutilities.hxx
@@ -1318,47 +1318,32 @@ SAFEARRAY* 	UnoConversionUtilities<T>::createUnoSequenceWrapper(const Any& rSeq)
         
     typelib_TypeDescription* pSeqElementDesc= NULL;
     TYPELIB_DANGER_GET( &pSeqElementDesc, pSeqElementTypeRef);
+    sal_Int32 nElementSize= pSeqElementDesc->nSize;
+    n= punoSeq->nElements;
 
-    // try to find VARIANT type that is related to the UNO type of the sequence elements
-    // the sequence as a sequence element should be handled in a special way
-    VARTYPE eTargetElementType = VT_EMPTY;
-    if ( pSeqElementDesc->eTypeClass != TypeClass_SEQUENCE )
-        eTargetElementType = mapTypeClassToVartype( static_cast< TypeClass >( pSeqElementDesc->eTypeClass ) );
+    SAFEARRAYBOUND rgsabound[1];
+    rgsabound[0].lLbound = 0;
+    rgsabound[0].cElements = n;
+    VARIANT oleElement;
+    long safeI[1];
 
-    if ( eTargetElementType != VT_EMPTY )
-        pArray = createUnoSequenceWrapper( rSeq, eTargetElementType );
+    pArray = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
 
-    if ( !pArray )
-    {
-        sal_Int32 nElementSize= pSeqElementDesc->nSize;
-        n= punoSeq->nElements;
-        
-        SAFEARRAYBOUND rgsabound[1];
-        rgsabound[0].lLbound = 0;
-        rgsabound[0].cElements = n;
-        VARIANT oleElement;
-        long safeI[1];
-        
-        pArray = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
-        
-        Any unoElement;
-        //		sal_uInt8 * pSeqData= (sal_uInt8*) punoSeq->pElements;
-        sal_uInt8 * pSeqData= (sal_uInt8*) punoSeq->elements;
+    Any unoElement;
+    sal_uInt8 * pSeqData= (sal_uInt8*) punoSeq->elements;
         
-        for (sal_uInt32 i = 0; i < n; i++)
-        {
-            unoElement.setValue( pSeqData + i * nElementSize, pSeqElementDesc);
-            VariantInit(&oleElement);
+    for (sal_uInt32 i = 0; i < n; i++)
+    {
+        unoElement.setValue( pSeqData + i * nElementSize, pSeqElementDesc);
+        VariantInit(&oleElement);
             
-            anyToVariant(&oleElement, unoElement);
+        anyToVariant(&oleElement, unoElement);
             
-            safeI[0] = i;
-            SafeArrayPutElement(pArray, safeI, &oleElement);
+        safeI[0] = i;
+        SafeArrayPutElement(pArray, safeI, &oleElement);
             
-            VariantClear(&oleElement);
-        }
+        VariantClear(&oleElement);
     }
-
     TYPELIB_DANGER_RELEASE( pSeqElementDesc);
         
     return pArray;	
commit dcbc2f5417a96b34d2dab7a6ea1e30ce4fb6a8d2
Author: Noel Power <noel.power at novell.com>
Date:   Thu Feb 23 15:16:23 2012 +0000

    Revert "fix handling of SAFEARRAY(s) returned as variant in olebridge (fdo#38441)"
    
    This reverts commit ab802aee181ca6df397ca53e461d5f53808cef9d.
    
    Signed-off-by: Michael Meeks<michael.meeks at suse.com>

diff --git a/extensions/source/ole/unoconversionutilities.hxx b/extensions/source/ole/unoconversionutilities.hxx
index 99f49c9..328fec4 100644
--- a/extensions/source/ole/unoconversionutilities.hxx
+++ b/extensions/source/ole/unoconversionutilities.hxx
@@ -134,7 +134,7 @@ public:
     /** @exception com.sun.star.lang.IllegalArgumentException
         If rSeq does not contain a sequence then the exception is thrown.
     */
-    VARTYPE createUnoSequenceWrapper(const Any& rSeq, SAFEARRAY*& pOutArray );
+    SAFEARRAY* 	createUnoSequenceWrapper(const Any& rSeq);
     /** @exception com.sun.star.lang.IllegalArgumentException
         If rSeq does not contain a sequence or elemtype has no proper value
         then the exception is thrown.
@@ -779,12 +779,11 @@ void UnoConversionUtilities<T>::anyToVariant(VARIANT* pVariant, const Any& rAny)
         }
         case TypeClass_SEQUENCE:		// sequence ??? SafeArray descriptor
         {
-            SAFEARRAY* pOutArray = NULL;
-            VARTYPE eArrayType = createUnoSequenceWrapper(rAny, pOutArray );
-            if (pOutArray)
+            SAFEARRAY* pArray = createUnoSequenceWrapper(rAny);
+            if (pArray)
             {
-                V_VT(pVariant) = VT_ARRAY | eArrayType;
-                V_ARRAY(pVariant) = pOutArray;
+                V_VT(pVariant) = VT_ARRAY | VT_VARIANT;
+                V_ARRAY(pVariant) = pArray;
             }
             else
             {
@@ -1296,8 +1295,9 @@ void  UnoConversionUtilities<T>::getElementCountAndTypeOfSequence( const Any& rS
 
 
 template<class T>
-VARTYPE UnoConversionUtilities<T>::createUnoSequenceWrapper(const Any& rSeq,  SAFEARRAY*& pArray)
+SAFEARRAY* 	UnoConversionUtilities<T>::createUnoSequenceWrapper(const Any& rSeq)
 {
+    SAFEARRAY* pArray = NULL;
     sal_uInt32 n = 0;
     
     if( rSeq.getValueTypeClass() != TypeClass_SEQUENCE )
@@ -1361,7 +1361,7 @@ VARTYPE UnoConversionUtilities<T>::createUnoSequenceWrapper(const Any& rSeq,  SA
 
     TYPELIB_DANGER_RELEASE( pSeqElementDesc);
         
-    return eTargetElementType;
+    return pArray;	
 }
 
 /* The argument rObj can contain


More information about the Libreoffice-commits mailing list