00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef INC_SPF_LOG
00019 #define INC_SPF_LOG
00020
00037 #include <stdarg.h>
00038
00039
00040 #define SPF_error(errmsg) SPF_errorx( __FILE__, __LINE__, "%s", errmsg )
00041 void SPF_errorx( const char *file, int line, const char *format, ... ) __attribute__ ((noreturn)) __attribute__ ((format (printf, 3, 4)));
00042 void SPF_errorx2( const char *format, ... );
00043 void SPF_errorv( const char *file, int line, const char *format, va_list ap ) __attribute__ ((noreturn)) __attribute__ ((format (printf, 3, 0)));
00044
00045 #define SPF_warning(errmsg) SPF_warningx( __FILE__, __LINE__, "%s", errmsg )
00046 void SPF_warningx( const char *file, int line, const char *format, ... ) __attribute__ ((format (printf, 3, 4)));
00047 void SPF_warningx2( const char *format, ... );
00048 void SPF_warningv( const char *file, int line, const char *format, va_list ap ) __attribute__ ((format (printf, 3, 0)));
00049
00050 #define SPF_info(errmsg) SPF_infox( __FILE__, __LINE__, "%s", errmsg )
00051 void SPF_infox( const char *file, int line, const char *format, ... ) __attribute__ ((format (printf, 3, 4)));
00052 void SPF_infox2( const char *format, ... );
00053 void SPF_infov( const char *file, int line, const char *format, va_list ap ) __attribute__ ((format (printf, 3, 0)));
00054
00055 #define SPF_debug(errmsg) SPF_debugx( __FILE__, __LINE__, "%s", errmsg )
00056 void SPF_debugx( const char *file, int line, const char *format, ... ) __attribute__ ((format (printf, 3, 4)));
00057 void SPF_debugx2( const char *format, ... );
00058 void SPF_debugv( const char *file, int line, const char *format, va_list ap ) __attribute__ ((format (printf, 3, 0)));
00059
00060
00061 #if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
00062
00063 #define SPF_errorf(format, ... ) SPF_errorx( __FILE__, __LINE__, format, __VA_ARGS__ )
00064 #define SPF_warningf(format, ... ) SPF_warningx( __FILE__, __LINE__, format, __VA_ARGS__ )
00065 #define SPF_infof(format, ... ) SPF_infox( __FILE__, __LINE__, format, __VA_ARGS__ )
00066 #define SPF_debugf(format, ... ) SPF_debugx( __FILE__, __LINE__, format, __VA_ARGS__ )
00067
00068 #elif defined( __GNUC__ )
00069
00070 #define SPF_errorf(format... ) SPF_errorx( __FILE__, __LINE__, format )
00071 #define SPF_warningf(format... ) SPF_warningx( __FILE__, __LINE__, format )
00072 #define SPF_infof(format... ) SPF_infox( __FILE__, __LINE__, format )
00073 #define SPF_debugf(format... ) SPF_debugx( __FILE__, __LINE__, format )
00074
00075 #else
00076
00077 #define SPF_errorf SPF_errorx2
00078 #define SPF_warningf SPF_warningx2
00079 #define SPF_infof SPF_infox2
00080 #define SPF_debugf SPF_debugx2
00081
00082 #endif
00083
00084
00085
00086
00087 void SPF_error_stdio( const char *file, int line, const char *errmsg ) __attribute__ ((noreturn));
00088 void SPF_warning_stdio( const char *file, int line, const char *errmsg );
00089 void SPF_info_stdio( const char *file __attribute__ ((unused)), int line __attribute__ ((unused)), const char *errmsg );
00090 void SPF_debug_stdio( const char *file, int line, const char *errmsg );
00091
00092
00093
00094
00095 void SPF_error_syslog( const char *file, int line, const char *errmsg ) __attribute__ ((noreturn));
00096 void SPF_warning_syslog( const char *file, int line, const char *errmsg );
00097 void SPF_info_syslog( const char *file __attribute__ ((unused)), int line __attribute__ ((unused)), const char *errmsg );
00098 void SPF_debug_syslog( const char *file, int line, const char *errmsg );
00099
00100
00101 #define SPF_DEFAULT_ERROR_HANDLER SPF_error_stdio
00102 #define SPF_DEFAULT_WARNING_HANDLER SPF_warning_stdio
00103 #define SPF_DEFAULT_INFO_HANDLER SPF_info_stdio
00104 #define SPF_DEFAULT_DEBUG_HANDLER SPF_debug_stdio
00105
00106
00107
00108
00109
00110
00111
00112
00113 extern void (*SPF_error_handler)( const char *, int, const char * ) __attribute__ ((noreturn));
00114 extern void (*SPF_warning_handler)( const char *, int, const char * );
00115 extern void (*SPF_info_handler)( const char *, int, const char * );
00116 extern void (*SPF_debug_handler)( const char *, int, const char * );
00117
00118 #define SPF_ASSERT_NOTNULL(x) \
00119 do { if ((x) == NULL) SPF_error(#x " is NULL"); } while(0)
00120
00121
00122
00123
00124 #endif