File: | cppuhelper/source/exc_thrower.cxx |
Location: | line 223, column 5 |
Description: | Called C++ object pointer is null |
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: */ |