| File: | cppuhelper/source/exc_thrower.cxx |
| Location: | line 264, column 5 |
| Description: | Access to field 'eTypeClass' results in a dereference of a null pointer (loaded from variable 'pMemberTD') |
| 1 | /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ | |||||
| 2 | /************************************************************************* | |||||
| 3 | * | |||||
| 4 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |||||
| 5 | * | |||||
| 6 | * Copyright 2000, 2010 Oracle and/or its affiliates. | |||||
| 7 | * | |||||
| 8 | * OpenOffice.org - a multi-platform office productivity suite | |||||
| 9 | * | |||||
| 10 | * This file is part of OpenOffice.org. | |||||
| 11 | * | |||||
| 12 | * OpenOffice.org is free software: you can redistribute it and/or modify | |||||
| 13 | * it under the terms of the GNU Lesser General Public License version 3 | |||||
| 14 | * only, as published by the Free Software Foundation. | |||||
| 15 | * | |||||
| 16 | * OpenOffice.org is distributed in the hope that it will be useful, | |||||
| 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
| 19 | * GNU Lesser General Public License version 3 for more details | |||||
| 20 | * (a copy is included in the LICENSE file that accompanied this code). | |||||
| 21 | * | |||||
| 22 | * You should have received a copy of the GNU Lesser General Public License | |||||
| 23 | * version 3 along with OpenOffice.org. If not, see | |||||
| 24 | * <http://www.openoffice.org/license.html> | |||||
| 25 | * for a copy of the LGPLv3 License. | |||||
| 26 | * | |||||
| 27 | ************************************************************************/ | |||||
| 28 | ||||||
| 29 | ||||||
| 30 | #include "rtl/instance.hxx" | |||||
| 31 | #include "osl/diagnose.h" | |||||
| 32 | #include "osl/doublecheckedlocking.h" | |||||
| 33 | #include "osl/mutex.hxx" | |||||
| 34 | #include "uno/dispatcher.hxx" | |||||
| 35 | #include "uno/mapping.hxx" | |||||
| 36 | #include "cppuhelper/detail/XExceptionThrower.hpp" | |||||
| 37 | #include "com/sun/star/uno/RuntimeException.hpp" | |||||
| 38 | ||||||
| 39 | #include "cppuhelper/exc_hlp.hxx" | |||||
| 40 | ||||||
| 41 | #define OUSTR(x)::rtl::OUString( (&(x)[0]), ((sal_Int32)((sizeof (x) / sizeof ((x)[0]))-1)), (((rtl_TextEncoding) 11)) ) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x)(&(x)[0]), ((sal_Int32)((sizeof (x) / sizeof ((x)[0]))-1) ), (((rtl_TextEncoding) 11)) ) | |||||
| 42 | ||||||
| 43 | ||||||
| 44 | using namespace ::rtl; | |||||
| 45 | using namespace ::osl; | |||||
| 46 | using namespace ::cppu; | |||||
| 47 | using namespace ::com::sun::star; | |||||
| 48 | using namespace ::com::sun::star::uno; | |||||
| 49 | ||||||
| 50 | namespace | |||||
| 51 | { | |||||
| 52 | ||||||
| 53 | using cppuhelper::detail::XExceptionThrower; | |||||
| 54 | ||||||
| 55 | //============================================================================== | |||||
| 56 | struct ExceptionThrower : public uno_Interface, XExceptionThrower | |||||
| 57 | { | |||||
| 58 | inline ExceptionThrower(); | |||||
| 59 | ||||||
| 60 | virtual ~ExceptionThrower() {} | |||||
| 61 | ||||||
| 62 | static inline Type const & getCppuType() | |||||
| 63 | { | |||||
| 64 | return ::getCppuType( | |||||
| 65 | reinterpret_cast< Reference< XExceptionThrower > const * >(0) ); | |||||
| 66 | } | |||||
| 67 | ||||||
| 68 | // XInterface | |||||
| 69 | virtual Any SAL_CALL queryInterface( Type const & type ) | |||||
| 70 | throw (RuntimeException); | |||||
| 71 | virtual void SAL_CALL acquire() throw (); | |||||
| 72 | virtual void SAL_CALL release() throw (); | |||||
| 73 | ||||||
| 74 | // XExceptionThrower | |||||
| 75 | virtual void SAL_CALL throwException( Any const & exc ) throw (Exception); | |||||
| 76 | virtual void SAL_CALL rethrowException() throw (Exception); | |||||
| 77 | }; | |||||
| 78 | ||||||
| 79 | extern "C" | |||||
| 80 | { | |||||
| 81 | ||||||
| 82 | //------------------------------------------------------------------------------ | |||||
| 83 | static void SAL_CALL ExceptionThrower_acquire_release_nop( | |||||
| 84 | SAL_UNUSED_PARAMETER__attribute__ ((unused)) uno_Interface * ) | |||||
| 85 | {} | |||||
| 86 | ||||||
| 87 | //------------------------------------------------------------------------------ | |||||
| 88 | static void SAL_CALL ExceptionThrower_dispatch( | |||||
| 89 | uno_Interface * pUnoI, typelib_TypeDescription const * pMemberType, | |||||
| 90 | void * pReturn, void * pArgs [], uno_Any ** ppException ) | |||||
| 91 | { | |||||
| 92 | OSL_ASSERT( pMemberType->eTypeClass == typelib_TypeClass_INTERFACE_METHOD )do { if (true && (!(pMemberType->eTypeClass == typelib_TypeClass_INTERFACE_METHOD ))) { sal_detail_logFormat((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl" ), ("/usr/local/src/libreoffice/cppuhelper/source/exc_thrower.cxx" ":" "92" ": "), "OSL_ASSERT: %s", "pMemberType->eTypeClass == typelib_TypeClass_INTERFACE_METHOD" ); } } while (false); | |||||
| 93 | ||||||
| 94 | switch (reinterpret_cast< typelib_InterfaceMemberTypeDescription * >( | |||||
| 95 | const_cast< typelib_TypeDescription * >( pMemberType ) )-> | |||||
| 96 | nPosition) | |||||
| 97 | { | |||||
| 98 | case 0: // queryInterace() | |||||
| 99 | { | |||||
| 100 | Type const & rType_demanded = | |||||
| 101 | *reinterpret_cast< Type const * >( pArgs[ 0 ] ); | |||||
| 102 | if (rType_demanded.equals( | |||||
| 103 | ::getCppuType( reinterpret_cast< | |||||
| 104 | Reference< XInterface > const * >(0) ) ) || | |||||
| 105 | rType_demanded.equals( ExceptionThrower::getCppuType() )) | |||||
| 106 | { | |||||
| 107 | typelib_TypeDescription * pTD = 0; | |||||
| 108 | TYPELIB_DANGER_GET( &pTD, rType_demanded.getTypeLibType() ){ typelib_TypeDescriptionReference * pMacroTypeRef = (rType_demanded .getTypeLibType()); typelib_TypeDescription ** ppMacroTypeDescr = (&pTD); if (((pMacroTypeRef->eTypeClass) == typelib_TypeClass_INTERFACE_METHOD || (pMacroTypeRef->eTypeClass) == typelib_TypeClass_INTERFACE_ATTRIBUTE )) { typelib_typedescriptionreference_getDescription( ppMacroTypeDescr , pMacroTypeRef ); } else if (!pMacroTypeRef->pType || !pMacroTypeRef ->pType->pWeakRef) { typelib_typedescriptionreference_getDescription ( ppMacroTypeDescr, pMacroTypeRef ); if (*ppMacroTypeDescr) typelib_typedescription_release ( *ppMacroTypeDescr ); } else { *ppMacroTypeDescr = pMacroTypeRef ->pType; } }; | |||||
| 109 | uno_any_construct( | |||||
| 110 | reinterpret_cast< uno_Any * >( pReturn ), &pUnoI, pTD, 0 ); | |||||
| 111 | TYPELIB_DANGER_RELEASE( pTD ){ if ((((pTD)->eTypeClass) == typelib_TypeClass_INTERFACE_METHOD || ((pTD)->eTypeClass) == typelib_TypeClass_INTERFACE_ATTRIBUTE )) typelib_typedescription_release( pTD ); }; | |||||
| 112 | } | |||||
| 113 | else | |||||
| 114 | { | |||||
| 115 | uno_any_construct( | |||||
| 116 | reinterpret_cast< uno_Any * >( pReturn ), 0, 0, 0 ); | |||||
| 117 | } | |||||
| 118 | *ppException = 0; | |||||
| 119 | break; | |||||
| 120 | } | |||||
| 121 | case 1: // acquire() | |||||
| 122 | case 2: // release() | |||||
| 123 | *ppException = 0; | |||||
| 124 | break; | |||||
| 125 | case 3: // throwException() | |||||
| 126 | { | |||||
| 127 | uno_Any * pAny = reinterpret_cast< uno_Any * >( pArgs[ 0 ] ); | |||||
| 128 | OSL_ASSERT( pAny->pType->eTypeClass == typelib_TypeClass_EXCEPTION )do { if (true && (!(pAny->pType->eTypeClass == typelib_TypeClass_EXCEPTION ))) { sal_detail_logFormat((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl" ), ("/usr/local/src/libreoffice/cppuhelper/source/exc_thrower.cxx" ":" "128" ": "), "OSL_ASSERT: %s", "pAny->pType->eTypeClass == typelib_TypeClass_EXCEPTION" ); } } while (false); | |||||
| 129 | uno_type_any_construct( *ppException, pAny->pData, pAny->pType, 0 ); | |||||
| 130 | break; | |||||
| 131 | } | |||||
| 132 | default: | |||||
| 133 | { | |||||
| 134 | OSL_ASSERT( 0 )do { if (true && (!(0))) { sal_detail_logFormat((SAL_DETAIL_LOG_LEVEL_WARN ), ("legacy.osl"), ("/usr/local/src/libreoffice/cppuhelper/source/exc_thrower.cxx" ":" "134" ": "), "OSL_ASSERT: %s", "0"); } } while (false); | |||||
| 135 | RuntimeException exc( | |||||
| 136 | OUSTR("not implemented!")::rtl::OUString( (&("not implemented!")[0]), ((sal_Int32) ((sizeof ("not implemented!") / sizeof (("not implemented!")[ 0]))-1)), (((rtl_TextEncoding) 11)) ), Reference< XInterface >() ); | |||||
| 137 | uno_type_any_construct( | |||||
| 138 | *ppException, &exc, ::getCppuType( &exc ).getTypeLibType(), 0 ); | |||||
| 139 | break; | |||||
| 140 | } | |||||
| 141 | } | |||||
| 142 | } | |||||
| 143 | ||||||
| 144 | } // extern "C" | |||||
| 145 | ||||||
| 146 | //______________________________________________________________________________ | |||||
| 147 | Any ExceptionThrower::queryInterface( Type const & type ) | |||||
| 148 | throw (RuntimeException) | |||||
| 149 | { | |||||
| 150 | if (type.equals( ::getCppuType( reinterpret_cast< | |||||
| 151 | Reference< XInterface > const * >(0) ) ) || | |||||
| 152 | type.equals( ExceptionThrower::getCppuType() )) | |||||
| 153 | { | |||||
| 154 | XExceptionThrower * that = static_cast< XExceptionThrower * >( this ); | |||||
| 155 | return Any( &that, type ); | |||||
| 156 | } | |||||
| 157 | return Any(); | |||||
| 158 | } | |||||
| 159 | ||||||
| 160 | //______________________________________________________________________________ | |||||
| 161 | void ExceptionThrower::acquire() throw () | |||||
| 162 | { | |||||
| 163 | } | |||||
| 164 | //______________________________________________________________________________ | |||||
| 165 | void ExceptionThrower::release() throw () | |||||
| 166 | { | |||||
| 167 | } | |||||
| 168 | ||||||
| 169 | //______________________________________________________________________________ | |||||
| 170 | void ExceptionThrower::throwException( Any const & exc ) throw (Exception) | |||||
| 171 | { | |||||
| 172 | OSL_FAIL( "unexpected!" )do { if (true && (((sal_Bool)1))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl"), ("/usr/local/src/libreoffice/cppuhelper/source/exc_thrower.cxx" ":" "172" ": "), "%s", "unexpected!"); } } while (false); | |||||
| 173 | throwException( exc ); | |||||
| 174 | } | |||||
| 175 | ||||||
| 176 | //______________________________________________________________________________ | |||||
| 177 | void ExceptionThrower::rethrowException() throw (Exception) | |||||
| 178 | { | |||||
| 179 | throw; | |||||
| 180 | } | |||||
| 181 | ||||||
| 182 | //______________________________________________________________________________ | |||||
| 183 | inline ExceptionThrower::ExceptionThrower() | |||||
| 184 | { | |||||
| 185 | uno_Interface::acquire = ExceptionThrower_acquire_release_nop; | |||||
| 186 | uno_Interface::release = ExceptionThrower_acquire_release_nop; | |||||
| 187 | uno_Interface::pDispatcher = ExceptionThrower_dispatch; | |||||
| 188 | } | |||||
| 189 | ||||||
| 190 | class theExceptionThrower : public rtl::Static<ExceptionThrower, theExceptionThrower> {}; | |||||
| 191 | ||||||
| 192 | } // anonymous namespace | |||||
| 193 | ||||||
| 194 | ||||||
| 195 | namespace cppu | |||||
| 196 | { | |||||
| 197 | ||||||
| 198 | //============================================================================== | |||||
| 199 | void SAL_CALL throwException( Any const & exc ) SAL_THROW( (Exception) ) | |||||
| 200 | { | |||||
| 201 | if (exc.getValueTypeClass() != TypeClass_EXCEPTION) | |||||
| 202 | { | |||||
| 203 | throw RuntimeException( | |||||
| 204 | OUSTR("no UNO exception given "::rtl::OUString( (&("no UNO exception given " "(must be derived from com::sun::star::uno::Exception)!" )[0]), ((sal_Int32)((sizeof ("no UNO exception given " "(must be derived from com::sun::star::uno::Exception)!" ) / sizeof (("no UNO exception given " "(must be derived from com::sun::star::uno::Exception)!" )[0]))-1)), (((rtl_TextEncoding) 11)) ) | |||||
| 205 | "(must be derived from com::sun::star::uno::Exception)!")::rtl::OUString( (&("no UNO exception given " "(must be derived from com::sun::star::uno::Exception)!" )[0]), ((sal_Int32)((sizeof ("no UNO exception given " "(must be derived from com::sun::star::uno::Exception)!" ) / sizeof (("no UNO exception given " "(must be derived from com::sun::star::uno::Exception)!" )[0]))-1)), (((rtl_TextEncoding) 11)) ), | |||||
| 206 | Reference< XInterface >() ); | |||||
| 207 | } | |||||
| 208 | ||||||
| 209 | Mapping uno2cpp(Environment(OUSTR(UNO_LB_UNO)::rtl::OUString( (&("uno")[0]), ((sal_Int32)((sizeof ("uno" ) / sizeof (("uno")[0]))-1)), (((rtl_TextEncoding) 11)) )), Environment::getCurrent()); | |||||
| 210 | if (! uno2cpp.is()) | |||||
| 211 | { | |||||
| 212 | throw RuntimeException( | |||||
| 213 | OUSTR("cannot get binary UNO to C++ mapping!")::rtl::OUString( (&("cannot get binary UNO to C++ mapping!" )[0]), ((sal_Int32)((sizeof ("cannot get binary UNO to C++ mapping!" ) / sizeof (("cannot get binary UNO to C++ mapping!")[0]))-1) ), (((rtl_TextEncoding) 11)) ), | |||||
| 214 | Reference< XInterface >() ); | |||||
| 215 | } | |||||
| 216 | ||||||
| 217 | Reference< XExceptionThrower > xThrower; | |||||
| 218 | uno2cpp.mapInterface( | |||||
| 219 | reinterpret_cast< void ** >( &xThrower ), | |||||
| 220 | static_cast< uno_Interface * >( &theExceptionThrower::get() ), | |||||
| 221 | ExceptionThrower::getCppuType() ); | |||||
| 222 | OSL_ASSERT( xThrower.is() )do { if (true && (!(xThrower.is()))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl"), ("/usr/local/src/libreoffice/cppuhelper/source/exc_thrower.cxx" ":" "222" ": "), "OSL_ASSERT: %s", "xThrower.is()"); } } while (false); | |||||
| 223 | xThrower->throwException( exc ); | |||||
| 224 | } | |||||
| 225 | ||||||
| 226 | //============================================================================== | |||||
| 227 | Any SAL_CALL getCaughtException() | |||||
| 228 | { | |||||
| 229 | Mapping cpp2uno(Environment::getCurrent(), Environment(OUSTR(UNO_LB_UNO)::rtl::OUString( (&("uno")[0]), ((sal_Int32)((sizeof ("uno" ) / sizeof (("uno")[0]))-1)), (((rtl_TextEncoding) 11)) ))); | |||||
| 230 | if (! cpp2uno.is()) | |||||
| ||||||
| 231 | { | |||||
| 232 | throw RuntimeException( | |||||
| 233 | OUSTR("cannot get C++ to binary UNO mapping!")::rtl::OUString( (&("cannot get C++ to binary UNO mapping!" )[0]), ((sal_Int32)((sizeof ("cannot get C++ to binary UNO mapping!" ) / sizeof (("cannot get C++ to binary UNO mapping!")[0]))-1) ), (((rtl_TextEncoding) 11)) ), | |||||
| 234 | Reference< XInterface >() ); | |||||
| 235 | } | |||||
| 236 | Mapping uno2cpp(Environment(OUSTR(UNO_LB_UNO)::rtl::OUString( (&("uno")[0]), ((sal_Int32)((sizeof ("uno" ) / sizeof (("uno")[0]))-1)), (((rtl_TextEncoding) 11)) )), Environment::getCurrent()); | |||||
| 237 | if (! uno2cpp.is()) | |||||
| 238 | { | |||||
| 239 | throw RuntimeException( | |||||
| 240 | OUSTR("cannot get binary UNO to C++ mapping!")::rtl::OUString( (&("cannot get binary UNO to C++ mapping!" )[0]), ((sal_Int32)((sizeof ("cannot get binary UNO to C++ mapping!" ) / sizeof (("cannot get binary UNO to C++ mapping!")[0]))-1) ), (((rtl_TextEncoding) 11)) ), | |||||
| 241 | Reference< XInterface >() ); | |||||
| 242 | } | |||||
| 243 | ||||||
| 244 | typelib_TypeDescription * pTD = 0; | |||||
| 245 | TYPELIB_DANGER_GET({ typelib_TypeDescriptionReference * pMacroTypeRef = (ExceptionThrower ::getCppuType().getTypeLibType()); typelib_TypeDescription ** ppMacroTypeDescr = (&pTD); if (((pMacroTypeRef->eTypeClass ) == typelib_TypeClass_INTERFACE_METHOD || (pMacroTypeRef-> eTypeClass) == typelib_TypeClass_INTERFACE_ATTRIBUTE)) { typelib_typedescriptionreference_getDescription ( ppMacroTypeDescr, pMacroTypeRef ); } else if (!pMacroTypeRef ->pType || !pMacroTypeRef->pType->pWeakRef) { typelib_typedescriptionreference_getDescription ( ppMacroTypeDescr, pMacroTypeRef ); if (*ppMacroTypeDescr) typelib_typedescription_release ( *ppMacroTypeDescr ); } else { *ppMacroTypeDescr = pMacroTypeRef ->pType; } } | |||||
| 246 | &pTD, ExceptionThrower::getCppuType().getTypeLibType() ){ typelib_TypeDescriptionReference * pMacroTypeRef = (ExceptionThrower ::getCppuType().getTypeLibType()); typelib_TypeDescription ** ppMacroTypeDescr = (&pTD); if (((pMacroTypeRef->eTypeClass ) == typelib_TypeClass_INTERFACE_METHOD || (pMacroTypeRef-> eTypeClass) == typelib_TypeClass_INTERFACE_ATTRIBUTE)) { typelib_typedescriptionreference_getDescription ( ppMacroTypeDescr, pMacroTypeRef ); } else if (!pMacroTypeRef ->pType || !pMacroTypeRef->pType->pWeakRef) { typelib_typedescriptionreference_getDescription ( ppMacroTypeDescr, pMacroTypeRef ); if (*ppMacroTypeDescr) typelib_typedescription_release ( *ppMacroTypeDescr ); } else { *ppMacroTypeDescr = pMacroTypeRef ->pType; } }; | |||||
| 247 | ||||||
| 248 | UnoInterfaceReference unoI; | |||||
| 249 | cpp2uno.mapInterface( | |||||
| 250 | reinterpret_cast< void ** >( &unoI.m_pUnoI ), | |||||
| 251 | static_cast< XExceptionThrower * >( &theExceptionThrower::get() ), pTD ); | |||||
| 252 | OSL_ASSERT( unoI.is() )do { if (true && (!(unoI.is()))) { sal_detail_logFormat ((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.osl"), ("/usr/local/src/libreoffice/cppuhelper/source/exc_thrower.cxx" ":" "252" ": "), "OSL_ASSERT: %s", "unoI.is()"); } } while ( false); | |||||
| 253 | ||||||
| 254 | typelib_TypeDescription * pMemberTD = 0; | |||||
| 255 | TYPELIB_DANGER_GET({ typelib_TypeDescriptionReference * pMacroTypeRef = (reinterpret_cast < typelib_InterfaceTypeDescription * >( pTD )-> ppMembers [ 1 ]); typelib_TypeDescription ** ppMacroTypeDescr = (&pMemberTD ); if (((pMacroTypeRef->eTypeClass) == typelib_TypeClass_INTERFACE_METHOD || (pMacroTypeRef->eTypeClass) == typelib_TypeClass_INTERFACE_ATTRIBUTE )) { typelib_typedescriptionreference_getDescription( ppMacroTypeDescr , pMacroTypeRef ); } else if (!pMacroTypeRef->pType || !pMacroTypeRef ->pType->pWeakRef) { typelib_typedescriptionreference_getDescription ( ppMacroTypeDescr, pMacroTypeRef ); if (*ppMacroTypeDescr) typelib_typedescription_release ( *ppMacroTypeDescr ); } else { *ppMacroTypeDescr = pMacroTypeRef ->pType; } } | |||||
| 256 | &pMemberTD,{ typelib_TypeDescriptionReference * pMacroTypeRef = (reinterpret_cast < typelib_InterfaceTypeDescription * >( pTD )-> ppMembers [ 1 ]); typelib_TypeDescription ** ppMacroTypeDescr = (&pMemberTD ); if (((pMacroTypeRef->eTypeClass) == typelib_TypeClass_INTERFACE_METHOD || (pMacroTypeRef->eTypeClass) == typelib_TypeClass_INTERFACE_ATTRIBUTE )) { typelib_typedescriptionreference_getDescription( ppMacroTypeDescr , pMacroTypeRef ); } else if (!pMacroTypeRef->pType || !pMacroTypeRef ->pType->pWeakRef) { typelib_typedescriptionreference_getDescription ( ppMacroTypeDescr, pMacroTypeRef ); if (*ppMacroTypeDescr) typelib_typedescription_release ( *ppMacroTypeDescr ); } else { *ppMacroTypeDescr = pMacroTypeRef ->pType; } } | |||||
| 257 | reinterpret_cast< typelib_InterfaceTypeDescription * >( pTD )->{ typelib_TypeDescriptionReference * pMacroTypeRef = (reinterpret_cast < typelib_InterfaceTypeDescription * >( pTD )-> ppMembers [ 1 ]); typelib_TypeDescription ** ppMacroTypeDescr = (&pMemberTD ); if (((pMacroTypeRef->eTypeClass) == typelib_TypeClass_INTERFACE_METHOD || (pMacroTypeRef->eTypeClass) == typelib_TypeClass_INTERFACE_ATTRIBUTE )) { typelib_typedescriptionreference_getDescription( ppMacroTypeDescr , pMacroTypeRef ); } else if (!pMacroTypeRef->pType || !pMacroTypeRef ->pType->pWeakRef) { typelib_typedescriptionreference_getDescription ( ppMacroTypeDescr, pMacroTypeRef ); if (*ppMacroTypeDescr) typelib_typedescription_release ( *ppMacroTypeDescr ); } else { *ppMacroTypeDescr = pMacroTypeRef ->pType; } } | |||||
| 258 | ppMembers[ 1 ] /* rethrowException() */ ){ typelib_TypeDescriptionReference * pMacroTypeRef = (reinterpret_cast < typelib_InterfaceTypeDescription * >( pTD )-> ppMembers [ 1 ]); typelib_TypeDescription ** ppMacroTypeDescr = (&pMemberTD ); if (((pMacroTypeRef->eTypeClass) == typelib_TypeClass_INTERFACE_METHOD || (pMacroTypeRef->eTypeClass) == typelib_TypeClass_INTERFACE_ATTRIBUTE )) { typelib_typedescriptionreference_getDescription( ppMacroTypeDescr , pMacroTypeRef ); } else if (!pMacroTypeRef->pType || !pMacroTypeRef ->pType->pWeakRef) { typelib_typedescriptionreference_getDescription ( ppMacroTypeDescr, pMacroTypeRef ); if (*ppMacroTypeDescr) typelib_typedescription_release ( *ppMacroTypeDescr ); } else { *ppMacroTypeDescr = pMacroTypeRef ->pType; } }; | |||||
| 259 | ||||||
| 260 | uno_Any exc_mem; | |||||
| 261 | uno_Any * exc = &exc_mem; | |||||
| 262 | unoI.dispatch( pMemberTD, 0, 0, &exc ); | |||||
| 263 | ||||||
| 264 | TYPELIB_DANGER_RELEASE( pMemberTD ){ if ((((pMemberTD)->eTypeClass) == typelib_TypeClass_INTERFACE_METHOD || ((pMemberTD)->eTypeClass) == typelib_TypeClass_INTERFACE_ATTRIBUTE )) typelib_typedescription_release( pMemberTD ); }; | |||||
| ||||||
| 265 | TYPELIB_DANGER_RELEASE( pTD ){ if ((((pTD)->eTypeClass) == typelib_TypeClass_INTERFACE_METHOD || ((pTD)->eTypeClass) == typelib_TypeClass_INTERFACE_ATTRIBUTE )) typelib_typedescription_release( pTD ); }; | |||||
| 266 | ||||||
| 267 | if (exc == 0) | |||||
| 268 | { | |||||
| 269 | throw RuntimeException( | |||||
| 270 | OUSTR("rethrowing C++ exception failed!")::rtl::OUString( (&("rethrowing C++ exception failed!")[0 ]), ((sal_Int32)((sizeof ("rethrowing C++ exception failed!") / sizeof (("rethrowing C++ exception failed!")[0]))-1)), ((( rtl_TextEncoding) 11)) ), | |||||
| 271 | Reference< XInterface >() ); | |||||
| 272 | } | |||||
| 273 | ||||||
| 274 | Any ret; | |||||
| 275 | uno_any_destruct( &ret, reinterpret_cast< uno_ReleaseFunc >(cpp_release) ); | |||||
| 276 | uno_type_any_constructAndConvert( | |||||
| 277 | &ret, exc->pData, exc->pType, uno2cpp.get() ); | |||||
| 278 | uno_any_destruct( exc, 0 ); | |||||
| 279 | return ret; | |||||
| 280 | } | |||||
| 281 | ||||||
| 282 | } | |||||
| 283 | ||||||
| 284 | /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |