PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB` /* * This program is free software; you can redistribute it and/or modify * it under the terms of either: * * a) The GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1, or (at your option) any * later version, * * OR * * b) The two-clause BSD license. * * These licenses can be found with the distribution in the file LICENSES */ #ifndef INC_SPF_LOG #define INC_SPF_LOG /** * @file * Error messages and warnings generated internally by the library call * these routines. By default, the messages go to stderr, but you can * define your own routines to deal with the messages instead. * * To use the syslog routines, add code such as: * * openlog(logPrefix,LOG_PID|LOG_CONS|LOG_NDELAY|LOG_NOWAIT,LOG_MAIL); * * SPF_error_handler = SPF_error_syslog; * SPF_warning_handler = SPF_warning_syslog; * SPF_info_handler = SPF_info_syslog; * SPF_debug_handler = SPF_debug_syslog; */ #include #define SPF_error(errmsg) SPF_errorx( __FILE__, __LINE__, "%s", errmsg ) void SPF_errorx( const char *file, int line, const char *format, ... ) __attribute__ ((noreturn)) __attribute__ ((format (printf, 3, 4))); void SPF_errorx2( const char *format, ... ); void SPF_errorv( const char *file, int line, const char *format, va_list ap ) __attribute__ ((noreturn)) __attribute__ ((format (printf, 3, 0))); #define SPF_warning(errmsg) SPF_warningx( __FILE__, __LINE__, "%s", errmsg ) void SPF_warningx( const char *file, int line, const char *format, ... ) __attribute__ ((format (printf, 3, 4))); void SPF_warningx2( const char *format, ... ); void SPF_warningv( const char *file, int line, const char *format, va_list ap ) __attribute__ ((format (printf, 3, 0))); #define SPF_info(errmsg) SPF_infox( __FILE__, __LINE__, "%s", errmsg ) void SPF_infox( const char *file, int line, const char *format, ... ) __attribute__ ((format (printf, 3, 4))); void SPF_infox2( const char *format, ... ); void SPF_infov( const char *file, int line, const char *format, va_list ap ) __attribute__ ((format (printf, 3, 0))); #define SPF_debug(errmsg) SPF_debugx( __FILE__, __LINE__, "%s", errmsg ) void SPF_debugx( const char *file, int line, const char *format, ... ) __attribute__ ((format (printf, 3, 4))); void SPF_debugx2( const char *format, ... ); void SPF_debugv( const char *file, int line, const char *format, va_list ap ) __attribute__ ((format (printf, 3, 0))); #if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L #define SPF_errorf(format, ... ) SPF_errorx( __FILE__, __LINE__, format, __VA_ARGS__ ) #define SPF_warningf(format, ... ) SPF_warningx( __FILE__, __LINE__, format, __VA_ARGS__ ) #define SPF_infof(format, ... ) SPF_infox( __FILE__, __LINE__, format, __VA_ARGS__ ) #define SPF_debugf(format, ... ) SPF_debugx( __FILE__, __LINE__, format, __VA_ARGS__ ) #elif defined( __GNUC__ ) #define SPF_errorf(format... ) SPF_errorx( __FILE__, __LINE__, format ) #define SPF_warningf(format... ) SPF_warningx( __FILE__, __LINE__, format ) #define SPF_infof(format... ) SPF_infox( __FILE__, __LINE__, format ) #define SPF_debugf(format... ) SPF_debugx( __FILE__, __LINE__, format ) #else #define SPF_errorf SPF_errorx2 #define SPF_warningf SPF_warningx2 #define SPF_infof SPF_infox2 #define SPF_debugf SPF_debugx2 #endif /* These message handler routines print to stderr or stdout, as appropriate. */ void SPF_error_stdio( const char *file, int line, const char *errmsg ) __attribute__ ((noreturn)); void SPF_warning_stdio( const char *file, int line, const char *errmsg ); void SPF_info_stdio( const char *file __attribute__ ((unused)), int line __attribute__ ((unused)), const char *errmsg ); void SPF_debug_stdio( const char *file, int line, const char *errmsg ); /* These message handler routines send messages to syslog */ void SPF_error_syslog( const char *file, int line, const char *errmsg ) __attribute__ ((noreturn)); void SPF_warning_syslog( const char *file, int line, const char *errmsg ); void SPF_info_syslog( const char *file __attribute__ ((unused)), int line __attribute__ ((unused)), const char *errmsg ); void SPF_debug_syslog( const char *file, int line, const char *errmsg ); /* FYI only -- can't be changed without recompiling the library */ #define SPF_DEFAULT_ERROR_HANDLER SPF_error_stdio #define SPF_DEFAULT_WARNING_HANDLER SPF_warning_stdio #define SPF_DEFAULT_INFO_HANDLER SPF_info_stdio #define SPF_DEFAULT_DEBUG_HANDLER SPF_debug_stdio /* * You can assign these global function pointers to whatever routines * you want to handle the various types of messages. Setting them to NULL * will cause the messages to be ignored. */ extern void (*SPF_error_handler)( const char *, int, const char * ) __attribute__ ((noreturn)); extern void (*SPF_warning_handler)( const char *, int, const char * ); extern void (*SPF_info_handler)( const char *, int, const char * ); extern void (*SPF_debug_handler)( const char *, int, const char * ); #define SPF_ASSERT_NOTNULL(x) \ do { if ((x) == NULL) SPF_error(#x " is NULL"); } while(0) #endif