diff options
Diffstat (limited to 'bridges/source/cpp_uno/gcc3_linux_hppa')
-rw-r--r-- | bridges/source/cpp_uno/gcc3_linux_hppa/except.cxx | 7 | ||||
-rw-r--r-- | bridges/source/cpp_uno/gcc3_linux_hppa/share.hxx | 6 | ||||
-rw-r--r-- | bridges/source/cpp_uno/gcc3_linux_hppa/uno2cpp.cxx | 2 |
3 files changed, 9 insertions, 6 deletions
diff --git a/bridges/source/cpp_uno/gcc3_linux_hppa/except.cxx b/bridges/source/cpp_uno/gcc3_linux_hppa/except.cxx index 3464ad7c3d39..c3033fb49a2a 100644 --- a/bridges/source/cpp_uno/gcc3_linux_hppa/except.cxx +++ b/bridges/source/cpp_uno/gcc3_linux_hppa/except.cxx @@ -266,8 +266,9 @@ namespace CPPU_CURRENT_NAMESPACE return header->adjustedPtr; } - void fillUnoException( __cxa_exception * header, uno_Any * pUnoExc, uno_Mapping * pCpp2Uno ) + void fillUnoException(uno_Any * pUnoExc, uno_Mapping * pCpp2Uno) { + __cxa_exception * header = __cxa_get_globals()->caughtExceptions; if (! header) { RuntimeException aRE( "no exception header!" ); @@ -277,8 +278,10 @@ namespace CPPU_CURRENT_NAMESPACE return; } + std::type_info *exceptionType = __cxa_current_exception_type(); + typelib_TypeDescription * pExcTypeDescr = 0; - OUString unoName( toUNOname( header->exceptionType->name() ) ); + OUString unoName( toUNOname( exceptionType->name() ) ); #if OSL_DEBUG_LEVEL > 1 OString cstr_unoName( OUStringToOString( unoName, RTL_TEXTENCODING_ASCII_US ) ); fprintf( stderr, "> c++ exception occurred: %s\n", cstr_unoName.getStr() ); diff --git a/bridges/source/cpp_uno/gcc3_linux_hppa/share.hxx b/bridges/source/cpp_uno/gcc3_linux_hppa/share.hxx index dd084e340a1e..5a65eeeef275 100644 --- a/bridges/source/cpp_uno/gcc3_linux_hppa/share.hxx +++ b/bridges/source/cpp_uno/gcc3_linux_hppa/share.hxx @@ -72,14 +72,14 @@ struct __cxa_eh_globals __cxa_exception *caughtExceptions; unsigned int uncaughtExceptions; }; -extern "C" __cxa_eh_globals *__cxa_get_globals () throw(); +extern "C" __cxa_eh_globals *__cxa_get_globals () throw(); +extern "C" std::type_info *__cxa_current_exception_type() throw(); void raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cpp ); -void fillUnoException( - __cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno ); +void fillUnoException(uno_Any *, uno_Mapping * pCpp2Uno); } diff --git a/bridges/source/cpp_uno/gcc3_linux_hppa/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_hppa/uno2cpp.cxx index 656f55c6b29e..d15e47f321d2 100644 --- a/bridges/source/cpp_uno/gcc3_linux_hppa/uno2cpp.cxx +++ b/bridges/source/cpp_uno/gcc3_linux_hppa/uno2cpp.cxx @@ -366,7 +366,7 @@ static void cpp_call( catch (...) { // fill uno exception - fillUnoException( CPPU_CURRENT_NAMESPACE::__cxa_get_globals()->caughtExceptions, *ppUnoExc, pThis->getBridge()->getCpp2Uno() ); + CPPU_CURRENT_NAMESPACE::fillUnoException(*ppUnoExc, pThis->getBridge()->getCpp2Uno()); // temporary params for ( ; nTempIndices--; ) |