added math::log2() to awk.
fixed some bugs in syslog handling
This commit is contained in:
		
							
								
								
									
										8
									
								
								qse/configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								qse/configure
									
									
									
									
										vendored
									
									
								
							| @ -19440,7 +19440,7 @@ done | ||||
|  | ||||
| OLDLIBS="$LIBS" | ||||
| LIBS="$LIBM $LIBS" | ||||
| for ac_func in powl fmodl sinl cosl tanl sinhl coshl tanhl asinl acosl atanl atan2l logl log10l expl sqrtl ceill floorl roundl | ||||
| for ac_func in powl fmodl sinl cosl tanl sinhl coshl tanhl asinl acosl atanl atan2l logl log2l log10l expl sqrtl ceill floorl roundl | ||||
| do : | ||||
|   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` | ||||
| ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" | ||||
| @ -19452,7 +19452,7 @@ _ACEOF | ||||
| fi | ||||
| done | ||||
|  | ||||
| for ac_func in pow fmod sin cos tan sinh cosh tanh asin acos atan atan2 log log10 exp sqrt ceil floor round | ||||
| for ac_func in pow fmod sin cos tan sinh cosh tanh asin acos atan atan2 log log2 log10 exp sqrt ceil floor round | ||||
| do : | ||||
|   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` | ||||
| ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" | ||||
| @ -19464,7 +19464,7 @@ _ACEOF | ||||
| fi | ||||
| done | ||||
|  | ||||
| for ac_func in powf fmodf sinf cosf tanf sinhf coshf tanhf asinf acosf atanf atan2f logf log10f expf sqrtf ceilf floorf roundf | ||||
| for ac_func in powf fmodf sinf cosf tanf sinhf coshf tanhf asinf acosf atanf atan2f logf log2f log10f expf sqrtf ceilf floorf roundf | ||||
| do : | ||||
|   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` | ||||
| ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" | ||||
| @ -22841,7 +22841,7 @@ fi | ||||
| 	then | ||||
| 		OLDLIBS="$LIBS" | ||||
| 		LIBS="$LIBM $LIBS" | ||||
| 		for ac_func in powq fmodq sinq cosq tanq sinhq coshq tanhq asinq acosq atanq atan2q logq log10q expq sqrtq ceilq floorq roundq | ||||
| 		for ac_func in powq fmodq sinq cosq tanq sinhq coshq tanhq asinq acosq atanq atan2q logq log2q log10q expq sqrtq ceilq floorq roundq | ||||
| do : | ||||
|   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` | ||||
| ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" | ||||
|  | ||||
| @ -159,9 +159,9 @@ AC_CHECK_FUNCS([snprintf _vsnprintf _vsnwprintf]) | ||||
|  | ||||
| OLDLIBS="$LIBS" | ||||
| LIBS="$LIBM $LIBS" | ||||
| AC_CHECK_FUNCS([powl fmodl sinl cosl tanl sinhl coshl tanhl asinl acosl atanl atan2l logl log10l expl sqrtl ceill floorl roundl]) | ||||
| AC_CHECK_FUNCS([pow fmod sin cos tan sinh cosh tanh asin acos atan atan2 log log10 exp sqrt ceil floor round]) | ||||
| AC_CHECK_FUNCS([powf fmodf sinf cosf tanf sinhf coshf tanhf asinf acosf atanf atan2f logf log10f expf sqrtf ceilf floorf roundf]) | ||||
| AC_CHECK_FUNCS([powl fmodl sinl cosl tanl sinhl coshl tanhl asinl acosl atanl atan2l logl log2l log10l expl sqrtl ceill floorl roundl]) | ||||
| AC_CHECK_FUNCS([pow fmod sin cos tan sinh cosh tanh asin acos atan atan2 log log2 log10 exp sqrt ceil floor round]) | ||||
| AC_CHECK_FUNCS([powf fmodf sinf cosf tanf sinhf coshf tanhf asinf acosf atanf atan2f logf log2f log10f expf sqrtf ceilf floorf roundf]) | ||||
| LIBS="$OLDLIBS" | ||||
|  | ||||
| dnl OLDLIBS="$LIBS" | ||||
| @ -591,7 +591,7 @@ then | ||||
| 	then | ||||
| 		OLDLIBS="$LIBS" | ||||
| 		LIBS="$LIBM $LIBS" | ||||
| 		AC_CHECK_FUNCS([powq fmodq sinq cosq tanq sinhq coshq tanhq asinq acosq atanq atan2q logq log10q expq sqrtq ceilq floorq roundq]) | ||||
| 		AC_CHECK_FUNCS([powq fmodq sinq cosq tanq sinhq coshq tanhq asinq acosq atanq atan2q logq log2q log10q expq sqrtq ceilq floorq roundq]) | ||||
| 		AC_CHECK_FUNCS([strtoflt128]) | ||||
| 		LIBS="$OLDLIBS" | ||||
| 	fi | ||||
|  | ||||
| @ -365,6 +365,18 @@ | ||||
| /* Define to 1 if you have the `log10q' function. */ | ||||
| #undef HAVE_LOG10Q | ||||
|  | ||||
| /* Define to 1 if you have the `log2' function. */ | ||||
| #undef HAVE_LOG2 | ||||
|  | ||||
| /* Define to 1 if you have the `log2f' function. */ | ||||
| #undef HAVE_LOG2F | ||||
|  | ||||
| /* Define to 1 if you have the `log2l' function. */ | ||||
| #undef HAVE_LOG2L | ||||
|  | ||||
| /* Define to 1 if you have the `log2q' function. */ | ||||
| #undef HAVE_LOG2Q | ||||
|  | ||||
| /* Define to 1 if you have the `logf' function. */ | ||||
| #undef HAVE_LOGF | ||||
|  | ||||
|  | ||||
| @ -39,20 +39,25 @@ | ||||
| #define QSE_LOG_MSG_MAX   10204 | ||||
| #define QSE_LOG_IDENT_MAX 32 | ||||
|  | ||||
| #define QSE_LOG_MASK_PRIORITY 0x00000FFFUL | ||||
| #define QSE_LOG_MASK_OPTION   0x000FF000UL | ||||
| #define QSE_LOG_MASK_TARGET   0xFFF00000UL | ||||
|  | ||||
| /* priority */ | ||||
| #define QSE_LOG_PANIC          (1UL << 0) | ||||
| #define QSE_LOG_ALERT          (1UL << 1) | ||||
| #define QSE_LOG_CRITICAL       (1UL << 2) | ||||
| #define QSE_LOG_ERROR          (1UL << 3) | ||||
| #define QSE_LOG_WARNING        (1UL << 4) | ||||
| #define QSE_LOG_NOTICE         (1UL << 5) | ||||
| #define QSE_LOG_INFO           (1UL << 6) | ||||
| #define QSE_LOG_DEBUG          (1UL << 7) | ||||
| #define QSE_LOG_PANIC           0x0000UL | ||||
| #define QSE_LOG_ALERT           0x0001UL | ||||
| #define QSE_LOG_CRITICAL        0x0002UL | ||||
| #define QSE_LOG_ERROR           0x0003UL | ||||
| #define QSE_LOG_WARNING         0x0004UL | ||||
| #define QSE_LOG_NOTICE          0x0005UL | ||||
| #define QSE_LOG_INFO            0x0006UL | ||||
| #define QSE_LOG_DEBUG           0x0007UL | ||||
|  | ||||
| /* options */ | ||||
| #define QSE_LOG_KEEP_FILE_OPEN        (1UL << 13) | ||||
| #define QSE_LOG_ENABLE_MASKED         (1UL << 14) | ||||
| #define QSE_LOG_INCLUDE_PID           (1UL << 15) | ||||
| #define QSE_LOG_HOST_IN_REMOTE_SYSLOG (1UL << 16) | ||||
|  | ||||
| /* target */ | ||||
| #define QSE_LOG_CONSOLE         (1UL << 20) | ||||
| @ -60,9 +65,6 @@ | ||||
| #define QSE_LOG_SYSLOG          (1UL << 22) | ||||
| #define QSE_LOG_SYSLOG_REMOTE   (1UL << 23) | ||||
|  | ||||
| #define QSE_LOG_MASK_PRIORITY 0x00000FFFUL | ||||
| #define QSE_LOG_MASK_OPTION   0x000FF000UL | ||||
| #define QSE_LOG_MASK_TARGET   0xFFF00000UL | ||||
|  | ||||
|  | ||||
| /* facility */ | ||||
| @ -92,8 +94,18 @@ enum qse_log_facility_t | ||||
| typedef enum qse_log_facility_t qse_log_facility_t; | ||||
|  | ||||
|  | ||||
| /* TODO: support ENABLE_MASKED??? */ | ||||
| #define QSE_LOG_ENABLED(log,pri) ((pri) <= ((log)->flags & QSE_LOG_MASK_PRIORITY))  | ||||
|  | ||||
|  | ||||
| #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) | ||||
| #define QSE_LOG(log,ident,pri,...) \ | ||||
| 	do { \ | ||||
| 		if (QSE_LOG_ENABLED(log,pri)) \ | ||||
| 			qse_log_report (log, ident, pri, __VA_ARGS__); \ | ||||
| 	} while (0) | ||||
| #endif | ||||
|  | ||||
| #define QSE_LOG0(log,ident,pri,fmt) \ | ||||
| 	do { \ | ||||
| 		if (QSE_LOG_ENABLED(log,pri)) \ | ||||
|  | ||||
| @ -374,6 +374,21 @@ static qse_awk_flt_t math_log (qse_awk_t* awk, qse_awk_flt_t x) | ||||
| #endif | ||||
| } | ||||
|  | ||||
| static qse_awk_flt_t math_log2 (qse_awk_t* awk, qse_awk_flt_t x) | ||||
| { | ||||
| #if defined(QSE_USE_AWK_FLTMAX) && defined(HAVE_LOG2Q) | ||||
| 	return log2q (x); | ||||
| #elif defined(HAVE_LOG2L) && (QSE_SIZEOF_LONG_DOUBLE > QSE_SIZEOF_DOUBLE) | ||||
| 	return log2l (x); | ||||
| #elif defined(HAVE_LOG2) | ||||
| 	return log2 (x); | ||||
| #elif defined(HAVE_LOG2F) | ||||
| 	return log2f (x); | ||||
| #else | ||||
| 	#error ### no log2 function available ### | ||||
| #endif | ||||
| } | ||||
|  | ||||
| static qse_awk_flt_t math_log10 (qse_awk_t* awk, qse_awk_flt_t x) | ||||
| { | ||||
| #if defined(QSE_USE_AWK_FLTMAX) && defined(HAVE_LOG10Q) | ||||
| @ -494,6 +509,11 @@ static int fnc_log (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| 	return fnc_math_1 (rtx, fi, math_log); | ||||
| } | ||||
|  | ||||
| static int fnc_log2 (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	return fnc_math_1 (rtx, fi, math_log2); | ||||
| } | ||||
|  | ||||
| static int fnc_log10 (qse_awk_rtx_t* rtx, const qse_awk_fnc_info_t* fi) | ||||
| { | ||||
| 	return fnc_math_1 (rtx, fi, math_log10); | ||||
| @ -600,6 +620,7 @@ static fnctab_t fnctab[] = | ||||
| 	{ QSE_T("floor"),   { { 1, 1, QSE_NULL },     fnc_floor,      0 } }, | ||||
| 	{ QSE_T("log"),     { { 1, 1, QSE_NULL },     fnc_log,        0 } }, | ||||
| 	{ QSE_T("log10"),   { { 1, 1, QSE_NULL },     fnc_log10,      0 } }, | ||||
| 	{ QSE_T("log2"),    { { 1, 1, QSE_NULL },     fnc_log2,       0 } }, | ||||
| 	{ QSE_T("rand"),    { { 0, 0, QSE_NULL },     fnc_rand,       0 } }, | ||||
| 	{ QSE_T("round"),   { { 1, 1, QSE_NULL },     fnc_round,      0 } }, | ||||
| 	{ QSE_T("sin"),     { { 1, 1, QSE_NULL },     fnc_sin,        0 } }, | ||||
|  | ||||
| @ -37,6 +37,7 @@ | ||||
| 	#include <sys/socket.h> | ||||
| 	#include <netinet/in.h> | ||||
| 	#include <sys/un.h> | ||||
| 	#include <sys/utsname.h> | ||||
| 	#include "../cmn/syscall.h" | ||||
| #endif | ||||
|  | ||||
| @ -49,8 +50,7 @@ static const qse_char_t* __priority_names[] = | ||||
| 	QSE_T("warning"), | ||||
| 	QSE_T("notice"), | ||||
| 	QSE_T("info"), | ||||
| 	QSE_T("debug"), | ||||
| 	QSE_NULL | ||||
| 	QSE_T("debug") | ||||
| }; | ||||
|  | ||||
| static const qse_mchar_t* __syslog_month_names[] = | ||||
| @ -332,17 +332,16 @@ void qse_log_setpriority (qse_log_t* log, int priority) | ||||
|  | ||||
| int qse_log_setprioritybyname (qse_log_t* log, const qse_char_t* name) | ||||
| { | ||||
| 	const qse_char_t** p = __priority_names; | ||||
|  | ||||
| 	while (*p != QSE_NULL)  | ||||
| 	qse_size_t i; | ||||
|  | ||||
| 	for (i = 0; i < QSE_COUNTOF(__priority_names); i++) | ||||
| 	{ | ||||
| 		if (qse_strcmp(*p, name) == 0)  | ||||
| 		if (qse_strcmp(__priority_names[i], name) == 0)  | ||||
| 		{ | ||||
| 			qse_log_setpriority (log, (int)(p - __priority_names)); | ||||
| 			qse_log_setpriority (log, i); | ||||
| 			return 0; | ||||
| 		} | ||||
|  | ||||
| 		p++; | ||||
| 	} | ||||
|  | ||||
| 	return -1; | ||||
| @ -523,7 +522,7 @@ void qse_log_reportv (qse_log_t* log, const qse_char_t* ident, int pri, const qs | ||||
| 		if (!log->wmsgbuf) goto done; | ||||
| #endif | ||||
|  | ||||
| 		sl_pri = (pri < QSE_COUNTOF(__syslog_priority))? __syslog_priority[pri]: LOG_DEBUG; | ||||
| 		sl_pri = (pri < QSE_COUNTOF(__syslog_priority))? __syslog_priority[(pri & QSE_LOG_MASK_PRIORITY)]: LOG_DEBUG; | ||||
|  | ||||
| 		fplen = qse_mbs_fmt(log->dmsgbuf, QSE_MT("<%d>"), (int)(log->syslog_facility | sl_pri)); | ||||
| 		if (fplen == (qse_size_t)-1) goto done; | ||||
| @ -534,6 +533,17 @@ void qse_log_reportv (qse_log_t* log, const qse_char_t* ident, int pri, const qs | ||||
| 			cnow.hour, cnow.min, cnow.sec); | ||||
| 		if (fpdlen == (qse_size_t)-1) goto done; | ||||
|  | ||||
|  | ||||
| 		if (log->flags & QSE_LOG_HOST_IN_REMOTE_SYSLOG) | ||||
| 		{ | ||||
| 			struct utsname un; | ||||
| 			if (uname(&un) == 0) | ||||
| 			{ | ||||
| 				fpdlen = qse_mbs_fcat (log->dmsgbuf, QSE_MT("%hs "), un.nodename); | ||||
| 				if (fpdlen == (qse_size_t)-1) goto done; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 	#if defined(QSE_CHAR_IS_MCHAR) | ||||
| 		identfmt = QSE_MT("%hs"); | ||||
| 		identparenfmt = QSE_MT("(%hs)"); | ||||
|  | ||||
| @ -13,15 +13,16 @@ void t1 (void) | ||||
| 	qse_nwad_t nwad; | ||||
|  | ||||
| 	t.file = QSE_T("/tmp/t3.log"); | ||||
| 	//qse_strtonwad ("127.0.0.1:560", &nwad); | ||||
| 	/*qse_strtonwad ("127.0.0.1:514", &nwad);*/ | ||||
| 	qse_strtonwad ("@/dev/log", &nwad); | ||||
| 	qse_nwadtoskad (&nwad, &t.syslog_remote); | ||||
|  | ||||
| 	log = qse_log_open (QSE_MMGR_GETDFL(), 0, QSE_T("t3"),  | ||||
| 		QSE_LOG_INCLUDE_PID | QSE_LOG_DEBUG | QSE_LOG_CONSOLE | | ||||
| 		QSE_LOG_FILE | QSE_LOG_SYSLOG | QSE_LOG_SYSLOG_REMOTE, &t); | ||||
| 		QSE_LOG_INCLUDE_PID | QSE_LOG_HOST_IN_REMOTE_SYSLOG | | ||||
| 		QSE_LOG_DEBUG | | ||||
| 		QSE_LOG_CONSOLE | QSE_LOG_FILE | QSE_LOG_SYSLOG | QSE_LOG_SYSLOG_REMOTE, &t); | ||||
|  | ||||
| 	QSE_ASSERT (qse_log_getoption (log) == QSE_LOG_INCLUDE_PID); | ||||
| 	QSE_ASSERT (qse_log_getoption (log) == (QSE_LOG_INCLUDE_PID | QSE_LOG_HOST_IN_REMOTE_SYSLOG)); | ||||
| 	QSE_ASSERT (qse_log_gettarget (log, QSE_NULL) == (QSE_LOG_CONSOLE | QSE_LOG_FILE | QSE_LOG_SYSLOG | QSE_LOG_SYSLOG_REMOTE)); | ||||
|  | ||||
| 	for (i = 0; i < 10; i++) | ||||
| @ -32,19 +33,25 @@ void t1 (void) | ||||
| 			qse_log_target_t t2; | ||||
|  | ||||
| 			qse_log_gettarget (log, &t2); | ||||
| 			qse_strtonwad ("127.0.0.1:560", &nwad); | ||||
| 			qse_strtonwad ("127.0.0.1:514", &nwad); | ||||
| 			qse_nwadtoskad (&nwad, &t2.syslog_remote); | ||||
| 			qse_log_settarget (log, QSE_LOG_CONSOLE | QSE_LOG_FILE | QSE_LOG_SYSLOG_REMOTE, &t2); | ||||
|  | ||||
| 			qse_log_setoption (log, qse_log_getoption(log) | QSE_LOG_KEEP_FILE_OPEN); | ||||
|  | ||||
| 			QSE_ASSERT (qse_log_getoption (log) == (QSE_LOG_INCLUDE_PID | QSE_LOG_KEEP_FILE_OPEN)); | ||||
| 			QSE_ASSERT (qse_log_getoption (log) == (QSE_LOG_INCLUDE_PID | QSE_LOG_HOST_IN_REMOTE_SYSLOG | QSE_LOG_KEEP_FILE_OPEN)); | ||||
| 			QSE_ASSERT (qse_log_gettarget (log, QSE_NULL) == (QSE_LOG_CONSOLE | QSE_LOG_FILE | QSE_LOG_SYSLOG_REMOTE)); | ||||
| 		} | ||||
|  | ||||
| 		QSE_LOG4 (log, QSE_T("test"), QSE_LOG_DEBUG, QSE_T("XXXXXXXX %d %I128x %#0128I128b %l20d >>"), 10 * i , q, q, (long)45); | ||||
| 	} | ||||
|  | ||||
|  | ||||
| #if defined(QSE_LOG) | ||||
| 	QSE_LOG (log, QSE_T("var"), QSE_LOG_INFO, QSE_T("variadic QSE_LOG() supported - no argument")); | ||||
| 	QSE_LOG (log, QSE_T("var"), QSE_LOG_ERROR, QSE_T("variadic QSE_LOG() supported %d %d"), 1, 2); | ||||
| 	QSE_LOG (log, QSE_T("var"), QSE_LOG_PANIC, QSE_T("variadic QSE_LOG() supported %10s"), QSE_T("panic")); | ||||
| #endif | ||||
| 	qse_log_close (log); | ||||
| } | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user