1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski #ifndef _OSL_DIAGNOSE_H_ 26*b1cdbd2cSJim Jagielski #define _OSL_DIAGNOSE_H_ 27*b1cdbd2cSJim Jagielski 28*b1cdbd2cSJim Jagielski #include <sal/types.h> 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski #ifdef __cplusplus 31*b1cdbd2cSJim Jagielski extern "C" { 32*b1cdbd2cSJim Jagielski #endif /* __cplusplus */ 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski /* ////////////////////////////////////////////////////////////////////////// 35*b1cdbd2cSJim Jagielski Diagnostic support 36*b1cdbd2cSJim Jagielski */ 37*b1cdbd2cSJim Jagielski 38*b1cdbd2cSJim Jagielski void SAL_CALL osl_breakDebug(void); 39*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL osl_assertFailedLine(const sal_Char* pszFileName, sal_Int32 nLine, const sal_Char* pszMessage); 40*b1cdbd2cSJim Jagielski void SAL_CALL osl_trace(const sal_Char* pszFormat, ...); 41*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL osl_reportError(sal_uInt32 nType, const sal_Char* pszErrorMessage); 42*b1cdbd2cSJim Jagielski 43*b1cdbd2cSJim Jagielski /* 44*b1cdbd2cSJim Jagielski For message delivery 45*b1cdbd2cSJim Jagielski */ 46*b1cdbd2cSJim Jagielski 47*b1cdbd2cSJim Jagielski /** a message delivery function which receives a pre-formatted message string 48*b1cdbd2cSJim Jagielski */ 49*b1cdbd2cSJim Jagielski typedef void (SAL_CALL *pfunc_osl_printDebugMessage)( const sal_Char * pszMessage ); 50*b1cdbd2cSJim Jagielski 51*b1cdbd2cSJim Jagielski /** a message delivery function which receives detailed information about where the message was triggered 52*b1cdbd2cSJim Jagielski */ 53*b1cdbd2cSJim Jagielski typedef void (SAL_CALL *pfunc_osl_printDetailedDebugMessage)( const sal_Char * pszFileName, sal_Int32 nLine, const sal_Char* pszMessage ); 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski /** sets a message delivery function 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski The function set here is ignored if a function for detailed message information 58*b1cdbd2cSJim Jagielski (pfunc_osl_printDetailedDebugMessage) has been set. 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski The given message handler must be able to cope with a <NULL/> message. 61*b1cdbd2cSJim Jagielski */ 62*b1cdbd2cSJim Jagielski pfunc_osl_printDebugMessage SAL_CALL osl_setDebugMessageFunc( pfunc_osl_printDebugMessage pNewFunc ); 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski /** sets a delivery function for detailed message information. 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski The given message handler must be able to cope with a <NULL/> message. 67*b1cdbd2cSJim Jagielski */ 68*b1cdbd2cSJim Jagielski pfunc_osl_printDetailedDebugMessage SAL_CALL osl_setDetailedDebugMessageFunc( pfunc_osl_printDetailedDebugMessage pNewFunc ); 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski #ifdef __cplusplus 71*b1cdbd2cSJim Jagielski } 72*b1cdbd2cSJim Jagielski #endif 73*b1cdbd2cSJim Jagielski 74*b1cdbd2cSJim Jagielski #define OSL_THIS_FILE __FILE__ 75*b1cdbd2cSJim Jagielski 76*b1cdbd2cSJim Jagielski /* the macro OSL_THIS_FUNC is intended to be an office internal macro for now */ 77*b1cdbd2cSJim Jagielski #define OSL_THIS_FUNC "<unknown>" 78*b1cdbd2cSJim Jagielski 79*b1cdbd2cSJim Jagielski /* the macro OSL_TO_STRING is intended to be an office internal macro for now */ 80*b1cdbd2cSJim Jagielski #define OSL_TO_STRING( x ) #x 81*b1cdbd2cSJim Jagielski 82*b1cdbd2cSJim Jagielski /* the macro OSL_MACRO_VALUE_TO_STRING is intended to be an office internal macro for now */ 83*b1cdbd2cSJim Jagielski #define OSL_MACRO_VALUE_TO_STRING( x ) OSL_TO_STRING( x ) 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski /* the macro OSL_LOG_PREFIX is intended to be an office internal macro for now */ 86*b1cdbd2cSJim Jagielski #define OSL_LOG_PREFIX OSL_THIS_FILE ":" OSL_THIS_FUNC ":" OSL_MACRO_VALUE_TO_STRING( __LINE__ ) "; " 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski #define OSL_DEBUG_ONLY(s) _OSL_DEBUG_ONLY(s) 89*b1cdbd2cSJim Jagielski #define OSL_TRACE _OSL_TRACE 90*b1cdbd2cSJim Jagielski #define OSL_ASSERT(c) _OSL_ASSERT(c, OSL_THIS_FILE, __LINE__) 91*b1cdbd2cSJim Jagielski #define OSL_ENSURE(c, m) _OSL_ENSURE(c, OSL_THIS_FILE, __LINE__, m) 92*b1cdbd2cSJim Jagielski 93*b1cdbd2cSJim Jagielski #define OSL_VERIFY(c) do { if (!(c)) OSL_ASSERT(0); } while (0) 94*b1cdbd2cSJim Jagielski #define OSL_PRECOND(c, m) OSL_ENSURE(c, m) 95*b1cdbd2cSJim Jagielski #define OSL_POSTCOND(c, m) OSL_ENSURE(c, m) 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski #ifdef __cplusplus 99*b1cdbd2cSJim Jagielski #define _OSL_GLOBAL :: 100*b1cdbd2cSJim Jagielski #else 101*b1cdbd2cSJim Jagielski #define _OSL_GLOBAL 102*b1cdbd2cSJim Jagielski #endif /* __cplusplus */ 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski #ifdef _WIN16 105*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0 106*b1cdbd2cSJim Jagielski #undef OSL_DEBUG_LEVEL 107*b1cdbd2cSJim Jagielski #define OSL_DEBUG_LEVEL 0 108*b1cdbd2cSJim Jagielski #endif 109*b1cdbd2cSJim Jagielski #endif 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski 113*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 0 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski #define _OSL_DEBUG_ONLY(f) (f) 116*b1cdbd2cSJim Jagielski #define _OSL_ASSERT(c, f, l) \ 117*b1cdbd2cSJim Jagielski do \ 118*b1cdbd2cSJim Jagielski { \ 119*b1cdbd2cSJim Jagielski if (!(c) && _OSL_GLOBAL osl_assertFailedLine(f, l, 0)) \ 120*b1cdbd2cSJim Jagielski _OSL_GLOBAL osl_breakDebug(); \ 121*b1cdbd2cSJim Jagielski } while (0) 122*b1cdbd2cSJim Jagielski 123*b1cdbd2cSJim Jagielski #define _OSL_ENSURE(c, f, l, m) \ 124*b1cdbd2cSJim Jagielski do \ 125*b1cdbd2cSJim Jagielski { \ 126*b1cdbd2cSJim Jagielski if (!(c) && _OSL_GLOBAL osl_assertFailedLine(f, l, m)) \ 127*b1cdbd2cSJim Jagielski _OSL_GLOBAL osl_breakDebug(); \ 128*b1cdbd2cSJim Jagielski } while (0) 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski #else 131*b1cdbd2cSJim Jagielski 132*b1cdbd2cSJim Jagielski #define _OSL_DEBUG_ONLY(f) ((void)0) 133*b1cdbd2cSJim Jagielski #define _OSL_ASSERT(c, f, l) ((void)0) 134*b1cdbd2cSJim Jagielski #define _OSL_ENSURE(c, f, l, m) ((void)0) 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski #endif /* OSL_DEBUG_LEVEL */ 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 1 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski #define _OSL_TRACE _OSL_GLOBAL osl_trace 141*b1cdbd2cSJim Jagielski 142*b1cdbd2cSJim Jagielski #else 143*b1cdbd2cSJim Jagielski 144*b1cdbd2cSJim Jagielski #define _OSL_TRACE 1 ? ((void)0) : _OSL_GLOBAL osl_trace 145*b1cdbd2cSJim Jagielski 146*b1cdbd2cSJim Jagielski #endif /* OSL_DEBUG_LEVEL */ 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski #endif /* _OSL_DIAGNOSE_H_ */ 149