215 lines
5.9 KiB
C
215 lines
5.9 KiB
C
#ifndef MSG_LOG_H
|
|
#define MSG_LOG_H
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
/*
|
|
* gettext support
|
|
* msglog.h must follow config.h
|
|
*/
|
|
|
|
#ifdef ENABLE_NLS
|
|
#include <libintl.h>
|
|
#else
|
|
#define gettext(msgid) (msgid)
|
|
#define textdomain(domain)
|
|
#define bindtextdomain(domain, dir)
|
|
#endif
|
|
|
|
#define _(msgid) gettext (msgid)
|
|
#define gettext_noop(msgid) msgid
|
|
#define N_(msgid) gettext_noop (msgid)
|
|
|
|
/*
|
|
* DBG_0 is for msg_dbg
|
|
* msg_dbgl and msg_dumpl share the same dbg_msk
|
|
*/
|
|
enum _debugLevelInfo {
|
|
DBG_0 = (1 << 0),
|
|
DBG_1 = (1 << 1),
|
|
DBG_2 = (1 << 2),
|
|
DBG_3 = (1 << 3),
|
|
DBG_4 = (1 << 4),
|
|
DBG_5 = (1 << 5),
|
|
DBG_6 = (1 << 6),
|
|
DBG_7 = (1 << 7),
|
|
DBG_8 = (1 << 8), /* sockcon */
|
|
DBG_9 = (1 << 9),
|
|
DBG_10 = (1 << 10),
|
|
DBG_11 = (1 << 11),
|
|
DBG_12 = (1 << 12),
|
|
DBG_13 = (1 << 13),
|
|
DBG_14 = (1 << 14), /* message dump */
|
|
DBG_15 = (1 << 15), /* lex */
|
|
DBG_16 = (1 << 16),
|
|
DBG_17 = (1 << 17),
|
|
DBG_18 = (1 << 18),
|
|
DBG_19 = (1 << 19),
|
|
DBG_20 = (1 << 20),
|
|
DBG_21 = (1 << 21),
|
|
DBG_22 = (1 << 22),
|
|
DBG_23 = (1 << 23),
|
|
DBG_24 = (1 << 24),
|
|
DBG_25 = (1 << 25),
|
|
DBG_26 = (1 << 26),
|
|
DBG_27 = (1 << 27),
|
|
DBG_28 = (1 << 28),
|
|
DBG_29 = (1 << 29),
|
|
DBG_30 = (1 << 30),
|
|
/* DBG_31 = (1 << 31), is not an integer constant expression */
|
|
};
|
|
|
|
typedef int (*MsgFunc) (int type, const char *s); /* display func proto */
|
|
|
|
typedef struct _MsgLogData MsgLogData;
|
|
|
|
/* struct _MsgLogData modved to msglog.c */
|
|
|
|
/*
|
|
* external variables should be declared in main as global !
|
|
*/
|
|
extern int prog_debug;
|
|
extern MsgLogData *msglogp; /* global pointeur to MsgLogData in main */
|
|
|
|
|
|
/*
|
|
* macros used to print messages
|
|
* msg_dbg : print a debug message normally used in development
|
|
* msg_info : print an informationnal message
|
|
* msg_warning : print a warning message
|
|
* msg_error : print a error message. Let the programmer to decide
|
|
* msg_fatal : print a error message and exit
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* Same macros with selective level or bit mask for debug
|
|
* msg_dbgl : print a debug message normally used in development
|
|
* a bit mask can be allocated to a part of the program.
|
|
* msg_infol : print an informatonnal message
|
|
* msg_warningl : print a warning message
|
|
* msg_errorl : print a error message. Let the programmer to decide
|
|
*
|
|
*/
|
|
|
|
|
|
enum _msg_fmt_info {
|
|
MSG_F_DATE = (1 << 0),
|
|
MSG_F_PROG = (1 << 1),
|
|
MSG_F_TYPE = (1 << 2),
|
|
MSG_F_FILE = (1 << 3),
|
|
MSG_F_FUNC = (1 << 4),
|
|
MSG_F_FOLD = (1 << 5),
|
|
MSG_F_COLOR = (1 << 6),
|
|
MSG_F_SIGNAL = (1 << 7), /* signal exit to parent */
|
|
MSG_F_OVERWRITE = (1 << 8), /* overwrite log file, default is append */
|
|
MSG_F_NO_DATE = MSG_F_PROG | MSG_F_TYPE | MSG_F_FILE | MSG_F_FUNC,
|
|
MSG_F_ALL =
|
|
MSG_F_DATE | MSG_F_PROG | MSG_F_TYPE | MSG_F_FILE | MSG_F_FUNC,
|
|
};
|
|
|
|
enum _msg_type_info {
|
|
MSG_T_DEBUG = 0,
|
|
MSG_T_INFO,
|
|
MSG_T_WARNING,
|
|
MSG_T_ERROR,
|
|
MSG_T_FATAL,
|
|
};
|
|
|
|
|
|
#ifdef MSG_DEBUG
|
|
#define msg_dbgl(msk, ...) \
|
|
if ( prog_debug ) { \
|
|
private_message( msk, MSG_T_DEBUG, __func__, __FILE__, __LINE__, __VA_ARGS__) ;\
|
|
}
|
|
#define msg_dbg(...) \
|
|
if ( prog_debug ) { \
|
|
private_message( 1, MSG_T_DEBUG, __func__, __FILE__, __LINE__, __VA_ARGS__) ;\
|
|
}
|
|
#define msg_set_dbg_msk(msk) \
|
|
private_msg_set_dbg_msk(msk);
|
|
#define msg_get_dbg_msk() \
|
|
(private_msg_get_dbg_msk())
|
|
#define msg_set_dbg_msk_str(str) \
|
|
private_msg_set_dbg_msk_str(str);
|
|
#define msg_get_dbg_msk_str(str) \
|
|
private_msg_get_dbg_msk_str(str);
|
|
#else
|
|
#define msg_dbgl(msk, ...)
|
|
#define msg_dbg(...)
|
|
#define msg_set_dbg_msk(msk)
|
|
#define msg_set_dbg_msk_str(str)
|
|
#define msg_get_dbg_msk_str(str)
|
|
#define msg_get_dbg_msk() (0)
|
|
#endif
|
|
|
|
#ifdef MSG_DUMP
|
|
#define msg_dump(buf, len, start, fd, ...) \
|
|
private_msg_dump(1, buf, len, start, fd, __VA_ARGS__) ;
|
|
#define msg_dumpl(msk, buf, len, start, fd, ...) \
|
|
private_msg_dump(msk, buf, len, start, fd, __VA_ARGS__) ;
|
|
#else
|
|
#define msg_dump(buf, len, start, fd, ...)
|
|
#define msg_dumpl(msk, buf, len, start, fd, ...)
|
|
#endif
|
|
|
|
#define msg_info(...) \
|
|
private_message(1, MSG_T_INFO, __func__, __FILE__, __LINE__, __VA_ARGS__)
|
|
|
|
#define msg_infol(level, ...) \
|
|
private_message(level, MSG_T_INFO, __func__, __FILE__, __LINE__, __VA_ARGS__)
|
|
|
|
#define msg_warning(...) \
|
|
private_message(1, MSG_T_WARNING, __func__, __FILE__, __LINE__, __VA_ARGS__)
|
|
|
|
#define msg_warningl(level, ...) \
|
|
private_message(level, MSG_T_WARNING, __func__, __FILE__, __LINE__, __VA_ARGS__)
|
|
|
|
#define msg_error(...) \
|
|
private_message(1, MSG_T_ERROR, __func__, __FILE__, __LINE__, __VA_ARGS__)
|
|
|
|
#define msg_errorl(level, ...) \
|
|
private_message(level, MSG_T_ERROR, __func__, __FILE__, __LINE__, __VA_ARGS__)
|
|
|
|
/*
|
|
* exit(1) is here to avoid a compiler message when no return after a
|
|
* msg_fatal. Exit will call msg_atexit.
|
|
*/
|
|
#define msg_fatal(...) \
|
|
{ private_message(0, MSG_T_FATAL, __func__, __FILE__, __LINE__, __VA_ARGS__ ); \
|
|
exit(1);}
|
|
|
|
void private_msg_set_dbg_msk(int msk);
|
|
int private_msg_get_dbg_msk(void);
|
|
unsigned int private_msg_set_dbg_msk_str(char *p);
|
|
void private_msg_get_dbg_msk_str(char *p);
|
|
void private_msg_dump(int level, char *buf, int len, int start, FILE *fd,
|
|
char *fmt, ... );
|
|
void private_message(int level, int msgtype, const char *func,
|
|
char *file, int line, char *fmt, ...);
|
|
|
|
void msg_initlog(char *name, int flags, char *filename,
|
|
MsgFunc displayFunc);
|
|
void msg_set_func(MsgFunc displayFunc);
|
|
void msg_set_flags(int flags);
|
|
int msg_get_level(void);
|
|
void msg_set_level(int level);
|
|
unsigned int private_msg_set_dbg_msk_str(char *str);
|
|
|
|
FILE *msg_openlog(char *filename, char *mode);
|
|
FILE *msg_get_msg_fd(void);
|
|
void msg_set_dbg_fd(FILE * msg_fd );
|
|
void msg_closelog(void);
|
|
void msg_atexit(void);
|
|
|
|
void msg_set_facility(int facility);
|
|
int msg_get_facility(void);
|
|
void msg_set_logger_is_open(int is_open);
|
|
int msg_get_logger_is_open(void);
|
|
|
|
extern const char *msg_day_of_week[];
|
|
extern const char *msg_month_of_year[];
|
|
|
|
#endif /* MSG_LOG_H */
|