/ OSX / libsecurity_apple_csp / lib / cspdebugging.h
cspdebugging.h
  1  /*
  2   * Copyright (c) 2000-2001,2011,2013-2014 Apple Inc. All Rights Reserved.
  3   * 
  4   * The contents of this file constitute Original Code as defined in and are
  5   * subject to the Apple Public Source License Version 1.2 (the 'License').
  6   * You may not use this file except in compliance with the License. Please obtain
  7   * a copy of the License at http://www.apple.com/publicsource and read it before
  8   * using this file.
  9   * 
 10   * This Original Code and all software distributed under the License are
 11   * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
 12   * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
 13   * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 14   * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the
 15   * specific language governing rights and limitations under the License.
 16   */
 17  
 18  
 19  /*
 20  	File:		cspdebugging.h
 21  
 22  	Contains:	Debugging macros.
 23  
 24  
 25  	Copyright (c) 1998,2011,2013-2014 Apple Inc. All Rights Reserved.
 26  
 27  	Change History (most recent first):
 28  
 29  		06/02/98	dpm		Added DEBUG_THREAD_YIELD.
 30  		03/10/98	dpm		Created.
 31  
 32  */
 33  
 34  #ifndef	_CSPDEBUGGING_H_
 35  #define _CSPDEBUGGING_H_
 36  
 37  #ifdef	NDEBUG
 38  #define DEBUG_ENABLE		0
 39  #define ERROR_LOG_ENABLE	0
 40  #else
 41  #define DEBUG_ENABLE		1
 42  #define ERROR_LOG_ENABLE	1
 43  #endif
 44  
 45  /* any other way? */
 46  #define LOG_VIA_PRINTF		1
 47  
 48  #if		DEBUG_ENABLE || ERROR_LOG_ENABLE
 49  
 50  #include <stdio.h>
 51  #include <stdlib.h>
 52  
 53  #if		!LOG_VIA_PRINTF
 54  
 55  #error Hey, figure out a debug mechanism
 56  
 57  #include <string.h>
 58  #include <TextUtils.h>
 59  
 60  /* common log macros */
 61  
 62  /* remaining ones can take constant strings */
 63  
 64  #ifdef	__cplusplus
 65  extern "C" {
 66  #endif
 67  
 68  extern void dblog0(char *str);
 69  extern void dblog1(char *str, void * arg1);
 70  extern void dblog2(char *str, void * arg1, void * arg2);
 71  extern void dblog3(char *str, void * arg1, void * arg2, void * arg3);
 72  extern void dblog4(char *str, void * arg1, void * arg2, void * arg3, void * arg4);
 73  
 74  #ifdef	__cplusplus
 75  }
 76  #endif
 77  
 78  
 79  #else	/* LOG_VIA_PRINTF */
 80  
 81  #define dblog0(str)								printf(str)
 82  #define dblog1(str, arg1)						printf(str, arg1)
 83  #define dblog2(str, arg1, arg2)					printf(str, arg1, arg2)
 84  #define dblog3(str, arg1, arg2, arg3)			printf(str, arg1, arg2, arg3)
 85  #define dblog4(str, arg1, arg2, arg3, arg4)		printf(str, arg1, arg2, arg3, arg4)
 86  
 87  #endif	/* LOG_VIA_PRINTF */
 88  
 89  #else	/* log macros disabled */
 90  
 91  #define dblog0(str)
 92  #define dblog1(str, arg1)
 93  #define dblog2(str, arg1, arg2)
 94  #define dblog3(str, arg1, arg2, arg3)
 95  #define dblog4(str, arg1, arg2, arg3, arg4)
 96  
 97  #endif	/* DEBUG_ENABLE || ERROR_LOG_ENABLE */
 98  
 99  #if	DEBUG_ENABLE
100  
101  #define dprintf0(str)								dblog0(str)
102  #define dprintf1(str, arg1)							dblog1(str, arg1)
103  #define dprintf2(str, arg1, arg2)					dblog2(str, arg1, arg2)
104  #define dprintf3(str, arg1, arg2, arg3)				dblog3(str, arg1, arg2, arg3)
105  #define dprintf4(str, arg1, arg2, arg3, arg4)		dblog4(str, arg1, arg2, arg3,  arg4)
106  
107  #ifdef	__cplusplus
108  extern "C" {
109  #endif
110  
111  #include <CrashReporterClient.h>
112  
113  static inline void _panic(const char *str)
114  {
115  	printf("%s\n", str);
116      CRSetCrashLogMessage(str);
117      abort();
118  }
119  
120  #ifdef	__cplusplus
121  }
122  #endif
123  
124  #define CASSERT(expression) 							\
125    ((expression) ? (void)0 : 							\
126     (dprintf1 ("Assertion failed: " #expression 			\
127        ", file " __FILE__ ", line %d.\n", __LINE__), 	\
128      _panic("Assertion Failure")))
129  
130  #else	/* DEBUG_ENABLE */
131  
132  #define dprintf0(str)
133  #define dprintf1(str, arg1)
134  #define dprintf2(str, arg1, arg2)
135  #define dprintf3(str, arg1, arg2, arg3)
136  #define dprintf4(str, arg1, arg2, arg3, arg4)
137  
138  #define CASSERT(expression)
139  
140  #endif	/* DEBUG_ENABLE */
141  
142  /*
143   * Error logging. This may well be platform dependent.
144   */
145  #if		ERROR_LOG_ENABLE
146  #define errorLog0(str)								dblog0(str);
147  #define errorLog1(str, arg1)						dblog1(str, arg1)
148  #define errorLog2(str, arg1, arg2)					dblog2(str, arg1, arg2)
149  #define errorLog3(str, arg1, arg2, arg3)			dblog3(str, arg1, arg2, arg3)
150  #define errorLog4(str, arg1, arg2, arg3, arg4)		dblog4(str, arg1, arg2, arg3, arg4)
151  
152  #else	/* ERROR_LOG_ENABLE */
153  
154  #define errorLog0(str)
155  #define errorLog1(str, arg1)
156  #define errorLog2(str, arg1, arg2)
157  #define errorLog3(str, arg1, arg2, arg3)
158  #define errorLog4(str, arg1, arg2, arg3, arg4)
159  
160  #endif	/* ERROR_LOG_ENABLE */
161  
162  #endif	/* _CSPDEBUGGING_H_ */