extensions/source/ole/unoconversionutilities.hxx | 67 ++++++++--------------- 1 file changed, 26 insertions(+), 41 deletions(-)
New commits: commit 21f1ed4c20b6409037ac215ec96abcacd581660e Author: Joachim Lingner <j...@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.me...@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.po...@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.me...@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 _______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits