Blame view

error.h 2.79 KB
redmine authored
1
/*
redmine authored
2 3 4 5
    clsync - file tree sync utility based on inotify/kqueue
    
    Copyright (C) 2013-2014 Dmitry Yu Okunev <dyokunev@ut.mephi.ru> 0x8E30679C
    
redmine authored
6 7 8 9
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
redmine authored
10
    
redmine authored
11 12 13 14
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
redmine authored
15
    
redmine authored
16 17 18 19
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

redmine authored
20 21 22
#ifndef __CLSYNC_ERROR_H
#define __CLSYNC_ERROR_H

redmine authored
23 24
#define BACKTRACE_LENGTH	256

redmine authored
25 26 27 28 29 30
#ifdef _DEBUG_FORCE
#	define DEBUGLEVEL_LIMIT 255
#else
#	define DEBUGLEVEL_LIMIT 9
#endif

redmine authored
31 32
extern void _critical( const char *const function_name, const char *fmt, ...);
#define critical(...) 				_critical(__FUNCTION__, __VA_ARGS__)
redmine authored
33
#define critical_on(cond) {debug(30, "critical_on: checking: %s", TOSTR(cond)); if (unlikely(cond)) {critical("Assert: "TOSTR(cond));}}
redmine authored
34 35 36

extern void _error(const char *const function_name, const char *fmt, ...);
#define error(...) 				_error(__FUNCTION__, __VA_ARGS__)
redmine authored
37
#define error_on(cond)	  {if (unlikely(cond)) {error("Error: ("TOSTR(cond)") != 0");}}
redmine authored
38 39 40 41 42 43 44

extern void _warning(const char *const function_name, const char *fmt, ...);
#define warning(...) 				_warning(__FUNCTION__, __VA_ARGS__)

extern void _info(const char *const function_name, const char *fmt, ...);
#define info(...) 				_info(__FUNCTION__, __VA_ARGS__)

redmine authored
45 46
#ifdef _DEBUG_SUPPORT
	extern void _debug(int debug_level, const char *const function_name, const char *fmt, ...);
redmine authored
47
#	define debug(debug_level, ...)			{if (debug_level < DEBUGLEVEL_LIMIT) _debug(debug_level, __FUNCTION__, __VA_ARGS__);}
redmine authored
48 49 50 51
#	define error_or_debug(debug_level, ...)		((debug_level)<0 ? _error(__FUNCTION__, __VA_ARGS__) : _debug(debug_level, __FUNCTION__, __VA_ARGS__))
#else
#	define debug(debug_level, ...)			{}
#	define error_or_debug(debug_level, ...)		((debug_level)<0 ? _error(__FUNCTION__, __VA_ARGS__) : (void)0)
redmine authored
52

redmine authored
53
#endif
redmine authored
54

redmine authored
55 56
#define debug_call(debug_level, code)			debug(debug_level, "%s -> %i", TOSTR(code), code)

redmine authored
57
#define critical_or_warning(cond, ...) ((cond) ? _critical : _warning)(__FUNCTION__, __VA_ARGS__)
redmine authored
58

redmine authored
59 60 61 62 63 64
enum ipc_type {
	IPCT_PRIVATE,
	IPCT_SHARED,
};
typedef enum ipc_type ipc_type_t;

redmine authored
65
extern void error_init(void *_outputmethod, int *_quiet, int *_verbose, int *_debug);
redmine authored
66 67
extern void error_init_ipc(ipc_type_t ipc_type);
extern void error_deinit();
redmine authored
68 69 70 71 72 73 74 75 76 77

enum outputmethod {
	OM_STDERR = 0,
	OM_STDOUT,
	OM_SYSLOG,

	OM_MAX
};
typedef enum outputmethod outputmethod_t;

redmine authored
78 79
#endif