diff options
author | Yuri Dario <ydario@apache.org> | 2013-10-28 11:07:01 +0000 |
---|---|---|
committer | Yuri Dario <ydario@apache.org> | 2013-10-28 11:07:01 +0000 |
commit | 89ded41db1f9884eec75097206a64df1b1c7f72a (patch) | |
tree | 12a0519fc0783d50e796cbd08e12ca8620326c3b /sal | |
parent | 051d1cb209bfe64b2f32400d88898c8ee2cde213 (diff) |
i118923 - OS/2 port: make use of system ExceptQ exception handler.
Notes
Notes:
ignore: OS/2
Diffstat (limited to 'sal')
-rw-r--r-- | sal/inc/sal/main.h | 18 | ||||
-rw-r--r-- | sal/osl/os2/salinit.cxx | 92 | ||||
-rw-r--r-- | sal/osl/os2/thread.c | 12 |
3 files changed, 41 insertions, 81 deletions
diff --git a/sal/inc/sal/main.h b/sal/inc/sal/main.h index c695a04046f7..51ceea5fd2a6 100644 --- a/sal/inc/sal/main.h +++ b/sal/inc/sal/main.h @@ -33,6 +33,24 @@ extern "C" { void SAL_CALL sal_detail_initialize(int argc, char ** argv); void SAL_CALL sal_detail_deinitialize(); +#ifdef SAL_OS2 +#include <string.h> + +#define INCL_DOSPROCESS +#define INCL_DOSEXCEPTIONS +#define INCL_DOSMODULEMGR +#include <os2.h> +#define INCL_LOADEXCEPTQ +#include <exceptq.h> + +#define sal_detail_initialize(a,b) \ + EXCEPTIONREGISTRATIONRECORD exRegRec = {0}; \ + LoadExceptq(&exRegRec, NULL, NULL); \ + osl_setCommandArgs(argc, argv); +#define sal_detail_deinitialize() \ + UninstallExceptq(&exRegRec); +#endif // SAL_OS2 + #define SAL_MAIN_WITH_ARGS_IMPL \ int SAL_CALL main(int argc, char ** argv) \ { \ diff --git a/sal/osl/os2/salinit.cxx b/sal/osl/os2/salinit.cxx index 0412f9336922..ebafddba0171 100644 --- a/sal/osl/os2/salinit.cxx +++ b/sal/osl/os2/salinit.cxx @@ -19,99 +19,29 @@ * *************************************************************/ +#include <stdio.h> - -#define INCL_DOS -#include <os2.h> - -#include "precompiled_sal.hxx" -#include "sal/config.h" - -#include "osl/process.h" -#include "sal/main.h" #include "sal/types.h" -// for exception logging -#include <stdio.h> -#include <string.h> -#include <setjmp.h> - +#ifdef __cplusplus extern "C" { +#endif /*----------------------------------------------------------------------------*/ -static CHAR szOOoExe[CCHMAXPATH]; - -static FILE* APIENTRY _oslExceptOpenLogFile(VOID) -{ - FILE *file; - DATETIME DT; - PPIB pib; - PSZ slash; - - // get executable fullpath - DosGetInfoBlocks(NULL, &pib); - DosQueryModuleName(pib->pib_hmte, sizeof(szOOoExe), szOOoExe); - // truncate to exe name - slash = (PSZ)strrchr( szOOoExe, '.'); - *slash = '\0'; - // make log path - strcat( szOOoExe, ".log"); - - file = fopen( szOOoExe, "a"); - if (!file) { // e.g. readonly drive - // try again, usually C exist and is writable - file = fopen( "c:\\OOo.log", "a"); - } - if (file) { - DosGetDateTime(&DT); - fprintf(file, "\nTrap message -- Date: %04d-%02d-%02d, Time: %02d:%02d:%02d\n", - DT.year, DT.month, DT.day, - DT.hours, DT.minutes, DT.seconds); - fprintf(file, "-------------------------------------------------------\n" - "\nAn internal error occurred (Built " __DATE__ "-" __TIME__ ").\n"); - - } - - // ok, return handle - return (file); -} - -/*----------------------------------------------------------------------------*/ - -#if 0 // until exceptions restored OSL_DEBUG_LEVEL == 0 -static EXCEPTSTRUCT g_excptstruct = {0}; -#endif - +// replaced by macros in sal/main.h void SAL_CALL sal_detail_initialize(int argc, char ** argv) { - APIRET rc = -1; - -#if 0 // until exceptions restored OSL_DEBUG_LEVEL == 0 - excRegisterHooks(_oslExceptOpenLogFile, NULL, NULL, FALSE); - - g_excptstruct.RegRec2.pfnHandler = (PFN)excHandlerLoud; - g_excptstruct.arc = DosSetExceptionHandler( - (PEXCEPTIONREGISTRATIONRECORD)&(g_excptstruct.RegRec2)); - - if (g_excptstruct.arc) - if (G_pfnExcHookError) - G_pfnExcHookError(__FILE__, __LINE__, __FUNCTION__, g_excptstruct.arc); - else - DosBeep(1000, 1000); - g_excptstruct.ulExcpt = setjmp(g_excptstruct.RegRec2.jmpThread); -#endif - - osl_setCommandArgs(argc, argv); + printf("Dead code\n"); + exit(1); } void SAL_CALL sal_detail_deinitialize() { - APIRET rc = -1; - -#if 0 // until exceptions restored OSL_DEBUG_LEVEL == 0 - rc = DosUnsetExceptionHandler((PEXCEPTIONREGISTRATIONRECORD)&(g_excptstruct.RegRec2)); -#endif + printf("Dead code\n"); + exit(1); } -} +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/sal/osl/os2/thread.c b/sal/osl/os2/thread.c index 717458b76fe9..818f9dbb515b 100644 --- a/sal/osl/os2/thread.c +++ b/sal/osl/os2/thread.c @@ -30,6 +30,13 @@ #include <rtl/alloc.h> #include <rtl/tencinfo.h> +#define INCL_DOSPROCESS +#define INCL_DOSEXCEPTIONS +#define INCL_DOSMODULEMGR +#include <os2.h> +#define INCL_LOADEXCEPTQ +#include <exceptq.h> + /* Thread-data structure hidden behind oslThread: */ @@ -93,6 +100,8 @@ static void oslWorkerWrapperFunction(void* pData) { BOOL rc; osl_TThreadImpl* pThreadImpl= (osl_TThreadImpl*)pData; + EXCEPTIONREGISTRATIONRECORD exRegRec = {0}; + LoadExceptq(&exRegRec, NULL, NULL); #if OSL_DEBUG_LEVEL>0 printf("oslWorkerWrapperFunction pThreadImpl %x, pThreadImpl->m_ThreadId %d\n", pThreadImpl, pThreadImpl->m_ThreadId); @@ -122,6 +131,9 @@ printf("pThreadImpl->m_ThreadId %d, about to terminate hab\n", pThreadImpl->m_Th rc = WinTerminate( pThreadImpl->m_hab ); #if OSL_DEBUG_LEVEL>0 printf("pThreadImpl->m_ThreadId %d, WinTerminate rc=%d (should be 1)\n", pThreadImpl->m_ThreadId, rc); + + UninstallExceptq(&exRegRec); + #endif } |