diff options
Diffstat (limited to 'misc/openoffice/patches/patch-ai')
-rw-r--r-- | misc/openoffice/patches/patch-ai | 316 |
1 files changed, 12 insertions, 304 deletions
diff --git a/misc/openoffice/patches/patch-ai b/misc/openoffice/patches/patch-ai index e9f7b9c1b93..2778d1060b6 100644 --- a/misc/openoffice/patches/patch-ai +++ b/misc/openoffice/patches/patch-ai @@ -1,305 +1,13 @@ -$NetBSD: patch-ai,v 1.1.1.1 2002/02/13 18:09:23 mrauch Exp $ +$NetBSD: patch-ai,v 1.2 2004/05/03 20:56:36 mrauch Exp $ ---- ../bridges/source/cpp_uno/gcc2_netbsd_powerpc/except.cxx.orig Sun Jan 6 11:42:57 2002 -+++ ../bridges/source/cpp_uno/gcc2_netbsd_powerpc/except.cxx -@@ -0,0 +1,300 @@ -+#include <dlfcn.h> -+#include <new.h> -+#include <typeinfo> -+#if STLPORT_VERSION<321 -+#include <map.h> -+#else -+#include <map> -+#endif -+#ifndef _RTL_ALLOC_H_ -+#include <rtl/alloc.h> -+#endif -+#ifndef _OSL_DIAGNOSE_H_ -+#include <osl/diagnose.h> -+#endif -+ -+#ifndef _BRIDGES_CPP_UNO_BRIDGE_HXX_ -+#include <bridges/cpp_uno/bridge.hxx> -+#endif -+#ifndef _TYPELIB_TYPEDESCRIPTION_HXX_ -+#include <typelib/typedescription.hxx> -+#endif -+#ifndef _COM_SUN_STAR_UNO_ANY_HXX_ -+#include <com/sun/star/uno/Any.hxx> -+#endif -+ -+#include <rtl/strbuf.hxx> -+ -+#include "gcc2_netbsd_powerpc.hxx" -+ -+using namespace std; -+using namespace osl; -+using namespace rtl; -+using namespace com::sun::star::uno; -+ -+namespace CPPU_CURRENT_NAMESPACE -+{ -+ -+//================================================================================================== -+static OString toUNOname( const OString & rRTTIname ) -+{ -+ OString aRet; -+ -+ sal_Char* pStr = rRTTIname.getStr(); -+ sal_Char* pOrg = pStr; -+ -+ // check for namespace -+ if( *pStr == '_' ) -+ pStr++; -+ if( *pStr == 'Q' ) -+ { -+ pStr++; -+ if( *pStr++ == '_' ) -+ { -+ while( *pStr++ != '_' ) -+ ; -+ } -+ } -+ -+ while( *pStr ) -+ { -+ int nCharsToCopy = 0; -+ while( *pStr >= '0' && *pStr <= '9' ) -+ nCharsToCopy = 10*nCharsToCopy + (int)(*pStr++ - '0'); -+ if( aRet.getLength() ) -+ aRet += "."; -+ aRet += rRTTIname.copy( pStr - pOrg, nCharsToCopy ); -+ pStr += nCharsToCopy; -+ } -+ -+ return aRet; -+} -+//================================================================================================== -+static OString toRTTIname( const OString & rUNOname ) -+{ -+ if( ! rUNOname.getLength() ) -+ return OString(); -+ -+ OStringBuffer aRet( 64 ); -+ -+ sal_Int32 nIndex = 0; -+ sal_Int32 nToken = 0; -+ do -+ { -+ OString aToken( rUNOname.getToken( 0, '.', nIndex ) ); -+ aRet.append( OString::valueOf( (sal_Int32)aToken.getLength() ) ); -+ aRet.append( aToken ); -+ ++nToken; -+ } -+ while (nIndex >= 0); -+ -+ OString ret( aRet.makeStringAndClear() ); -+ -+ if( nToken >= 2 ) -+ { -+ OStringBuffer buf( 64 ); -+ buf.append( 'Q' ); -+ if( nToken > 9 ) -+ aRet.append( '_' ); -+ buf.append( OString::valueOf( (sal_Int32)nToken ) ); -+ if( nToken > 9 ) -+ aRet.append( '_' ); -+ buf.append( ret ); -+ ret = buf.makeStringAndClear(); -+ } -+ -+ return ret; -+} -+ -+ -+//################################################################################################## -+//#### RTTI simulation ############################################################################# -+//################################################################################################## -+ -+class RTTIHolder -+{ -+ static std::map< OString, void* > aAllRTTI; -+public: -+ static void* getRTTI( const OString& rTypename ); -+ static void* getRTTI_UnoName( const OString& rUnoTypename ) -+ { return getRTTI( toRTTIname( rUnoTypename ) ); } -+ -+ static void* insertRTTI( const OString& rTypename ); -+ static void* insertRTTI_UnoName( const OString& rTypename ) -+ { return insertRTTI( toRTTIname( rTypename ) ); } -+ -+ // rSuperTypename MUST exist !!! -+ static void* insertRTTI( const OString& rTypename, const OString& rSuperTypename ); -+ static void* insertRTTI_UnoNames( const OString& rTypename, const OString& rSuperTypename ) -+ { return insertRTTI( toRTTIname( rTypename ), toRTTIname( rSuperTypename ) ); } -+ -+ // for complex RTTI -+ static void* insertRTTI( const OString& rTypename, void* pRTTI ); -+ static void* insertRTTI_UnoName( const OString&rTypename, void* pRTTI ) -+ { return insertRTTI( toRTTIname( rTypename ), pRTTI ); } -+}; -+ -+std::map< OString, void* > RTTIHolder::aAllRTTI; -+ -+void* RTTIHolder::getRTTI( const OString& rTypename ) -+{ -+ std::map< OString, void* >::iterator element; -+ -+ element = aAllRTTI.find( rTypename ); -+ return element != aAllRTTI.end() ? (*element).second : NULL; -+} -+ -+void* RTTIHolder::insertRTTI( const OString& rTypename ) -+{ -+#ifdef DEBUG -+ fprintf( stderr, "generating base RTTI: %s\n", rTypename.getStr() ); -+#endif -+ void* pRTTI = new __user_type_info( strdup( rTypename.getStr() ) ); -+ aAllRTTI[ rTypename ] = pRTTI; -+ return pRTTI; -+} -+ -+void* RTTIHolder::insertRTTI( const OString& rTypename, const OString& rSuperTypename ) -+{ -+ OSL_ENSURE( ! getRTTI( rTypename ), "insert RTTI called on already existing type" ); -+ void* pRTTI = new __si_type_info( strdup( rTypename.getStr() ), *(__user_type_info*)getRTTI( rSuperTypename ) ); -+ aAllRTTI[ rTypename ] = pRTTI; -+ return pRTTI; -+} -+ -+void* RTTIHolder::insertRTTI( const OString& rTypename, void* pRTTI ) -+{ -+ aAllRTTI[ rTypename ] = pRTTI; -+ return pRTTI; -+} -+ -+//-------------------------------------------------------------------------------------------------- -+ -+static void* generateRTTI( typelib_CompoundTypeDescription * pCompTypeDescr ) -+{ -+ OString aCompTypeName( OUStringToOString( pCompTypeDescr->aBase.pTypeName, RTL_TEXTENCODING_ASCII_US ) ); -+ void* pRTTI = RTTIHolder::getRTTI_UnoName( aCompTypeName ); -+ if( pRTTI ) -+ return pRTTI; -+ -+ if( ! pCompTypeDescr->pBaseTypeDescription ) -+ // this is a base type -+ return RTTIHolder::insertRTTI_UnoName( aCompTypeName ); -+ if( ! pCompTypeDescr->pBaseTypeDescription->pBaseTypeDescription ) -+ { -+ OString aBasename( -+ OUStringToOString( pCompTypeDescr->pBaseTypeDescription->aBase.pTypeName, RTL_TEXTENCODING_ASCII_US ) -+ ); -+ if( ! RTTIHolder::getRTTI_UnoName( aBasename ) ) -+ RTTIHolder::insertRTTI_UnoName( aBasename ); -+ -+ // this type has only one supertype -+ return RTTIHolder::insertRTTI_UnoNames( aCompTypeName, aBasename ); -+ } -+ -+ // create __si_type_info -+ void* pSuperRTTI = generateRTTI( pCompTypeDescr->pBaseTypeDescription ); -+ OString aCompTypeRTTIname( toRTTIname( aCompTypeName ) ); -+#ifdef DEBUG -+ fprintf( stderr, "generating RTTI: %s\n", aCompTypeRTTIname.getStr() ); -+#endif -+ pRTTI = new __si_type_info( strdup( aCompTypeRTTIname.getStr() ), -+ *(__user_type_info*)pSuperRTTI ); -+#if 0 -+ __class_type_info::base_info* pBaseInfo = new __class_type_info::base_info; -+ pBaseInfo->base = (__user_type_info*)pSuperRTTI; -+ pBaseInfo->offset = 0; -+ pBaseInfo->is_virtual = 0; -+ pBaseInfo->access1 = __class_type_info::PUBLIC; -+ -+ OString aCompTypeRTTIname( toRTTIname( aCompTypeName ) ); -+ pRTTI = new __class_type_info( -+ strdup( aCompTypeRTTIname.getStr() ), -+ pBaseInfo, -+ 1 -+ ); -+#endif -+ return RTTIHolder::insertRTTI_UnoName( aCompTypeName, pRTTI ); -+} -+ -+//-------------------------------------------------------------------------------------------------- -+ -+static Mutex s_aMutex; -+static std::map< void*, typelib_TypeDescription* > aExceptionMap; -+ -+static void deleteException( void* pExc, int nDummy ) -+{ -+ MutexGuard aGuard( s_aMutex ); -+ std::map< void*, typelib_TypeDescription* >::iterator element = -+ aExceptionMap.find( pExc ); -+ OSL_ASSERT( element != aExceptionMap.end() ); -+ if( element != aExceptionMap.end() ) -+ { -+ typelib_TypeDescription* pType = (*element).second; -+ aExceptionMap.erase( pExc ); -+ uno_destructData( pExc, pType, cpp_release ); -+ typelib_typedescription_release( pType ); -+ } -+} -+ -+//__________________________________________________________________________________________________ -+ -+//################################################################################################## -+//#### exported #################################################################################### -+//################################################################################################## -+ -+ -+void gcc291_netbsd_powerpc_raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cpp ) -+{ -+ // construct cpp exception object -+ typelib_TypeDescription * pTypeDescr = 0; -+ typelib_typedescriptionreference_getDescription( &pTypeDescr, pUnoExc->pType ); -+ -+ void * pCppExc = __eh_alloc( pTypeDescr->nSize ); // will be released in generated dtor -+ uno_copyAndConvertData( pCppExc, pUnoExc->pData, pTypeDescr, pUno2Cpp ); -+ -+ // destruct uno exception -+ uno_any_destruct( pUnoExc, 0 ); -+ -+ // a must be -+ OSL_ENSURE( sizeof(sal_Int32) == sizeof(void *), "### pointer size differs from sal_Int32!" ); -+ -+ typelib_CompoundTypeDescription * pCompTypeDescr = (typelib_CompoundTypeDescription *)pTypeDescr; -+ void* pRTTI = generateRTTI( pCompTypeDescr ); -+ -+ { -+ MutexGuard aGuard( s_aMutex ); -+ aExceptionMap[ pCppExc ] = pTypeDescr; -+ } -+ -+ __cp_push_exception( pCppExc, pRTTI, deleteException ); -+ __throw(); -+ -+} -+ -+void gcc291_netbsd_powerpc_fillUnoException( cp_eh_info* pInfo, uno_Any* pExc, uno_Mapping * pCpp2Uno ) -+{ -+ OUString aName( OStringToOUString( -+ toUNOname( ((__user_type_info*)(pInfo->type))->name() ), RTL_TEXTENCODING_ASCII_US ) ); -+ -+ typelib_TypeDescription * pExcTypeDescr = 0; -+ typelib_typedescription_getByName( -+ &pExcTypeDescr, -+ aName.pData ); -+ OSL_ENSURE( pExcTypeDescr, "could not get type description for exception" ); -+ -+ if (pExcTypeDescr) -+ { -+ // construct cpp exception any -+ Any aAny( pInfo->value, pExcTypeDescr ); // const_cast -+ typelib_typedescription_release( pExcTypeDescr ); -+ // construct uno exception any -+ typelib_TypeDescription* pAnyDescr = 0; -+ getCppuType( (const Any *)0 ).getDescription( &pAnyDescr ); -+ uno_copyAndConvertData( pExc, &aAny, pAnyDescr, pCpp2Uno ); -+ typelib_typedescription_release( pAnyDescr ); -+ } -+} -+ -+} -+ +--- ../solenv/inc/tg_app.mk.orig 2004-04-17 19:27:25.000000000 +0200 ++++ ../solenv/inc/tg_app.mk +@@ -172,7 +172,7 @@ $(APP$(TNR)TARGETN): $(APP$(TNR)OBJS) $( + @+-$(RM) $(MISC)$/$(@:b).cmd + @+echo $(LINK) $(LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)$/$(INPATH)$/lib $(SOLARLIB) $(STDSLO) \ + -o $@ $(APP$(TNR)OBJS:s/.obj/.o/) "\" > $(MISC)$/$(@:b).cmd +- @cat $(mktmp /dev/null $(APP$(TNR)LIBS)) | xargs -n 1 cat | sed s\#$(ROUT)\#$(OUT)\#g | sed 's#$$# \\#' >> $(MISC)$/$(@:b).cmd ++ @cat $(mktmp /dev/null $(APP$(TNR)LIBS)) | sed -E 's#[[:space:]]+# #g' | xargs -n 1 cat | sed s\#$(ROUT)\#$(OUT)\#g | sed 's#$$# \\#' >> $(MISC)$/$(@:b).cmd + @+echo $(APP_LINKTYPE) $(APP$(TNR)LIBSALCPPRT) $(APP$(TNR)STDLIBS) $(STDLIB) $(STDLIB$(TNR)) >> $(MISC)$/$(@:b).cmd + cat $(MISC)$/$(@:b).cmd + @source $(MISC)$/$(@:b).cmd |