File: | cppuhelper/source/exc_thrower.cxx |
Location: | line 111, column 13 |
Description: | Access to field 'eTypeClass' results in a dereference of a null pointer (loaded from variable 'pTD') |
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: */ |