fixed log functions for the WCHAR mode
This commit is contained in:
		| @ -58,8 +58,7 @@ | |||||||
| #define QSE_LOG_CONSOLE         (1UL << 20) | #define QSE_LOG_CONSOLE         (1UL << 20) | ||||||
| #define QSE_LOG_FILE            (1UL << 21) | #define QSE_LOG_FILE            (1UL << 21) | ||||||
| #define QSE_LOG_SYSLOG          (1UL << 22) | #define QSE_LOG_SYSLOG          (1UL << 22) | ||||||
| #define QSE_LOG_SYSLOG_LOCAL    (1UL << 23) | #define QSE_LOG_SYSLOG_REMOTE   (1UL << 23) | ||||||
| #define QSE_LOG_SYSLOG_REMOTE   (1UL << 24) |  | ||||||
|  |  | ||||||
| #define QSE_LOG_MASK_PRIORITY 0x00000FFFUL | #define QSE_LOG_MASK_PRIORITY 0x00000FFFUL | ||||||
| #define QSE_LOG_MASK_OPTION   0x000FF000UL | #define QSE_LOG_MASK_OPTION   0x000FF000UL | ||||||
| @ -220,6 +219,7 @@ struct qse_log_t | |||||||
| 	qse_mbs_t* dmsgbuf; | 	qse_mbs_t* dmsgbuf; | ||||||
| #if defined(QSE_CHAR_IS_WCHAR) | #if defined(QSE_CHAR_IS_WCHAR) | ||||||
| 	qse_wcs_t* wmsgbuf; | 	qse_wcs_t* wmsgbuf; | ||||||
|  | 	qse_mchar_t mident[QSE_LOG_IDENT_MAX * 2 +1]; | ||||||
| #endif | #endif | ||||||
| 	qse_mtx_t mtx; | 	qse_mtx_t mtx; | ||||||
|  |  | ||||||
| @ -240,7 +240,7 @@ typedef struct qse_log_target_t qse_log_target_t; | |||||||
| extern "C" { | extern "C" { | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| qse_log_t* qse_log_open ( | QSE_EXPORT qse_log_t* qse_log_open ( | ||||||
| 	qse_mmgr_t*               mmgr, | 	qse_mmgr_t*               mmgr, | ||||||
| 	qse_size_t                xtnsize, | 	qse_size_t                xtnsize, | ||||||
| 	const qse_char_t*         ident, | 	const qse_char_t*         ident, | ||||||
| @ -248,56 +248,76 @@ qse_log_t* qse_log_open ( | |||||||
| 	const qse_log_target_t*   target | 	const qse_log_target_t*   target | ||||||
| ); | ); | ||||||
|  |  | ||||||
| void qse_log_close ( | QSE_EXPORT void qse_log_close ( | ||||||
| 	qse_log_t*        log | 	qse_log_t*        log | ||||||
| ); | ); | ||||||
|  |  | ||||||
| void qse_log_setident ( | QSE_EXPORT void qse_log_setident ( | ||||||
| 	qse_log_t*        log, | 	qse_log_t*        log, | ||||||
| 	const qse_char_t* ident | 	const qse_char_t* ident | ||||||
| ); | ); | ||||||
|  |  | ||||||
| void qse_log_settarget ( | QSE_EXPORT void qse_log_settarget ( | ||||||
| 	qse_log_t*              log, | 	qse_log_t*              log, | ||||||
| 	int                     flags, | 	int                     flags, | ||||||
| 	const qse_log_target_t* target | 	const qse_log_target_t* target | ||||||
| ); | ); | ||||||
|  |  | ||||||
| int qse_log_gettarget ( | QSE_EXPORT int qse_log_gettarget ( | ||||||
| 	qse_log_t*        log, | 	qse_log_t*        log, | ||||||
| 	qse_log_target_t* target | 	qse_log_target_t* target | ||||||
| ); | ); | ||||||
|  |  | ||||||
| void qse_log_setpriority ( | QSE_EXPORT void qse_log_setoption ( | ||||||
|  | 	qse_log_t* log, | ||||||
|  | 	int        options | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | #if defined(QSE_HAVE_INLINE) | ||||||
|  | static QSE_INLINE int qse_log_getoption (qse_log_t* log) | ||||||
|  | { | ||||||
|  | 	return log->flags & QSE_LOG_MASK_OPTION; | ||||||
|  | } | ||||||
|  | #else | ||||||
|  | #define qse_log_getoption(log) ((log)->flags & QSE_LOG_MASK_OPTION) | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
|  | QSE_EXPORT void qse_log_setpriority ( | ||||||
| 	qse_log_t* log, | 	qse_log_t* log, | ||||||
| 	int        priority | 	int        priority | ||||||
| ); | ); | ||||||
|  |  | ||||||
| int qse_log_setprioritybyname ( | QSE_EXPORT int qse_log_setprioritybyname ( | ||||||
| 	qse_log_t*        log, | 	qse_log_t*        log, | ||||||
| 	const qse_char_t* name | 	const qse_char_t* name | ||||||
| ); | ); | ||||||
|  |  | ||||||
| void qse_log_setsyslogfacility ( | QSE_EXPORT void qse_log_setsyslogfacility ( | ||||||
| 	qse_log_t*         log, | 	qse_log_t*         log, | ||||||
| 	qse_log_facility_t facility | 	qse_log_facility_t facility | ||||||
| ); | ); | ||||||
|  |  | ||||||
| int qse_log_setsyslogfacilitybyname ( | QSE_EXPORT int qse_log_setsyslogfacilitybyname ( | ||||||
| 	qse_log_t*        log, | 	qse_log_t*        log, | ||||||
| 	const qse_char_t* name | 	const qse_char_t* name | ||||||
| ); | ); | ||||||
|  |  | ||||||
| int qse_log_getpriority ( | #if defined(QSE_HAVE_INLINE) | ||||||
| 	qse_log_t* log | static QSE_INLINE int qse_log_getpriority (qse_log_t* log) | ||||||
| ); | { | ||||||
|  | 	return log->flags & QSE_LOG_MASK_PRIORITY; | ||||||
|  | } | ||||||
|  | #else | ||||||
|  | #define qse_log_getpriority(log) ((log)->flags & QSE_LOG_MASK_PRIORITY) | ||||||
|  | #endif | ||||||
|  |  | ||||||
| const qse_char_t* qse_log_getpriorityname ( | const qse_char_t* qse_log_getpriorityname ( | ||||||
| 	qse_log_t* log | 	qse_log_t* log | ||||||
| ); | ); | ||||||
|  |  | ||||||
|  |  | ||||||
| void qse_log_report ( | QSE_EXPORT void qse_log_report ( | ||||||
| 	qse_log_t*        log,  | 	qse_log_t*        log,  | ||||||
| 	const qse_char_t* ident, | 	const qse_char_t* ident, | ||||||
| 	int               pri, | 	int               pri, | ||||||
| @ -305,7 +325,7 @@ void qse_log_report ( | |||||||
| 	... | 	... | ||||||
| ); | ); | ||||||
|  |  | ||||||
| void qse_log_reportv ( | QSE_EXPORT void qse_log_reportv ( | ||||||
| 	qse_log_t*        log, | 	qse_log_t*        log, | ||||||
| 	const qse_char_t* ident, | 	const qse_char_t* ident, | ||||||
| 	int               pri, | 	int               pri, | ||||||
| @ -313,7 +333,7 @@ void qse_log_reportv ( | |||||||
| 	va_list           ap | 	va_list           ap | ||||||
| ); | ); | ||||||
|  |  | ||||||
| const qse_char_t* qse_get_log_priority_name ( | QSE_EXPORT const qse_char_t* qse_get_log_priority_name ( | ||||||
| 	int pri | 	int pri | ||||||
| ); | ); | ||||||
|  |  | ||||||
|  | |||||||
| @ -53,7 +53,7 @@ static const qse_char_t* __priority_names[] = | |||||||
| 	QSE_NULL | 	QSE_NULL | ||||||
| }; | }; | ||||||
|  |  | ||||||
| static const qse_char_t* __syslog_month_names[] = | static const qse_mchar_t* __syslog_month_names[] = | ||||||
| { | { | ||||||
| 	QSE_MT("Jan"), | 	QSE_MT("Jan"), | ||||||
| 	QSE_MT("Feb"), | 	QSE_MT("Feb"), | ||||||
| @ -158,7 +158,6 @@ int qse_log_init (qse_log_t* log, qse_mmgr_t* mmgr, const qse_char_t* ident, int | |||||||
| 	} | 	} | ||||||
| 	if (potflags & QSE_LOG_CONSOLE) log->flags |= QSE_LOG_CONSOLE; | 	if (potflags & QSE_LOG_CONSOLE) log->flags |= QSE_LOG_CONSOLE; | ||||||
| 	if (potflags & QSE_LOG_SYSLOG) log->flags |= QSE_LOG_SYSLOG; | 	if (potflags & QSE_LOG_SYSLOG) log->flags |= QSE_LOG_SYSLOG; | ||||||
| 	if (potflags & QSE_LOG_SYSLOG_LOCAL) log->flags |= QSE_LOG_SYSLOG_LOCAL; |  | ||||||
|  |  | ||||||
| 	if (potflags & QSE_LOG_SYSLOG_REMOTE) | 	if (potflags & QSE_LOG_SYSLOG_REMOTE) | ||||||
| 	{ | 	{ | ||||||
| @ -255,6 +254,11 @@ void qse_log_setident (qse_log_t* log, const qse_char_t* ident) | |||||||
|  |  | ||||||
| 	if (log->t.syslog.opened) | 	if (log->t.syslog.opened) | ||||||
| 	{ | 	{ | ||||||
|  | 		/* it's best to avoid using QSE_LOG_SYSLOG | ||||||
|  | 		 * if the application calls syslog APIs directly. | ||||||
|  | 		 * otherwise, it may conflict with openlog()/closelog() | ||||||
|  | 		 * called in this library */ | ||||||
|  |  | ||||||
| 		closelog (); | 		closelog (); | ||||||
| 		log->t.syslog.opened = 0; | 		log->t.syslog.opened = 0; | ||||||
| 		/* it will be opened again with the new identifier in the | 		/* it will be opened again with the new identifier in the | ||||||
| @ -264,30 +268,44 @@ void qse_log_setident (qse_log_t* log, const qse_char_t* ident) | |||||||
|  |  | ||||||
| void qse_log_settarget (qse_log_t* log, int flags, const qse_log_target_t* target) | void qse_log_settarget (qse_log_t* log, int flags, const qse_log_target_t* target) | ||||||
| { | { | ||||||
| #if 0 | 	if (log->t.syslog_remote.sock >= 0) | ||||||
| /* TODO: */ |  | ||||||
| 	if ((log->flags & QSE_LOG_SYSLOG_REMOTE) != 0 && |  | ||||||
| 	    (flags & QSE_LOG_SYSLOG_REMOTE) == 0)  |  | ||||||
| 	{ | 	{ | ||||||
| 		QSE_CLOSE (log->t.syslog_remote.sock); | 		QSE_CLOSE (log->t.syslog_remote.sock); | ||||||
|  | 		log->t.syslog_remote.sock = -1; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if ((log->flags & QSE_LOG_SYSLOG_REMOTE) == 0 && | 	if (log->t.console.sio) | ||||||
| 	    (flags & QSE_LOG_SYSLOG_REMOTE) != 0)  |  | ||||||
| 	{ | 	{ | ||||||
| 		int sock; | 		qse_sio_close (log->t.console.sio); | ||||||
| 		sock = qse_sckopen (AF_INET, SOCK_DGRAM, 0); | 		log->t.console.sio = QSE_NULL; | ||||||
| 		if (sock == -1) flags &= ~QSE_LOG_SYSLOG_REMOTE; | 	} | ||||||
| 		else log->t.syslog_remote.sock = sock; |  | ||||||
|  | 	if (log->t.file.sio) | ||||||
|  | 	{ | ||||||
|  | 		qse_sio_close (log->t.file.sio); | ||||||
|  | 		log->t.file.sio = QSE_NULL; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if (log->t.syslog.opened)  | ||||||
|  | 	{ | ||||||
|  | 		closelog (); | ||||||
|  | 		log->t.syslog.opened = 0; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	log->flags &= (QSE_LOG_MASK_PRIORITY | QSE_LOG_MASK_OPTION); /* preserve the priority and the options */ | 	log->flags &= (QSE_LOG_MASK_PRIORITY | QSE_LOG_MASK_OPTION); /* preserve the priority and the options */ | ||||||
| 	if (flags & QSE_LOG_FILE) log->flags |= QSE_LOG_FILE; | 	if (flags & QSE_LOG_FILE)  | ||||||
|  | 	{ | ||||||
|  | 		qse_strxcpy (log->t.file.path, QSE_COUNTOF(log->t.file.path), target->file); | ||||||
|  | 		log->flags |= QSE_LOG_FILE; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if (flags & QSE_LOG_CONSOLE) log->flags |= QSE_LOG_CONSOLE; | 	if (flags & QSE_LOG_CONSOLE) log->flags |= QSE_LOG_CONSOLE; | ||||||
| 	if (flags & QSE_LOG_SYSLOG) log->flags |= QSE_LOG_SYSLOG; | 	if (flags & QSE_LOG_SYSLOG) log->flags |= QSE_LOG_SYSLOG; | ||||||
|  | 	if (flags & QSE_LOG_SYSLOG_REMOTE)  | ||||||
| 	if (flags & QSE_LOG_SYSLOG_REMOTE) log->flags |= QSE_LOG_SYSLOG_REMOTE; | 	{ | ||||||
| #endif | 		log->t.syslog_remote.addr = target->syslog_remote; | ||||||
|  | 		log->flags |= QSE_LOG_SYSLOG_REMOTE; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -301,9 +319,15 @@ int qse_log_gettarget (qse_log_t* log, qse_log_target_t* target) | |||||||
| 	return log->flags & QSE_LOG_MASK_TARGET; | 	return log->flags & QSE_LOG_MASK_TARGET; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void qse_log_setoption (qse_log_t* log, int option) | ||||||
|  | { | ||||||
|  | 	log->flags = (log->flags & (QSE_LOG_MASK_TARGET | QSE_LOG_MASK_PRIORITY)) | (option & QSE_LOG_MASK_OPTION); | ||||||
|  | } | ||||||
|  |  | ||||||
| void qse_log_setpriority (qse_log_t* log, int priority) | void qse_log_setpriority (qse_log_t* log, int priority) | ||||||
| { | { | ||||||
| 	log->flags = (log->flags & QSE_LOG_MASK_TARGET) | (priority & QSE_LOG_MASK_PRIORITY); | 	log->flags = (log->flags & (QSE_LOG_MASK_TARGET | QSE_LOG_MASK_OPTION)) | (priority & QSE_LOG_MASK_PRIORITY); | ||||||
| } | } | ||||||
|  |  | ||||||
| int qse_log_setprioritybyname (qse_log_t* log, const qse_char_t* name) | int qse_log_setprioritybyname (qse_log_t* log, const qse_char_t* name) | ||||||
| @ -324,6 +348,15 @@ int qse_log_setprioritybyname (qse_log_t* log, const qse_char_t* name) | |||||||
| 	return -1; | 	return -1; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | const qse_char_t* qse_log_getpriorityname (qse_log_t* log) | ||||||
|  | { | ||||||
|  | 	int pri = log->flags & QSE_LOG_MASK_PRIORITY; | ||||||
|  |  | ||||||
|  | 	if (pri < 0 || pri >= QSE_COUNTOF(__priority_names)) return QSE_NULL; | ||||||
|  | 	return __priority_names[pri]; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void qse_log_setsyslogfacility (qse_log_t* log, qse_log_facility_t facility) | void qse_log_setsyslogfacility (qse_log_t* log, qse_log_facility_t facility) | ||||||
| { | { | ||||||
| #ifndef _WIN32 | #ifndef _WIN32 | ||||||
| @ -354,19 +387,6 @@ int qse_log_setsyslogfacilitybyname (qse_log_t* log, const qse_char_t* name) | |||||||
| #endif | #endif | ||||||
| } | } | ||||||
|  |  | ||||||
| int qse_log_getpriority (qse_log_t* log) |  | ||||||
| { |  | ||||||
| 	return log->flags & QSE_LOG_MASK_PRIORITY; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| const qse_char_t* qse_log_getpriorityname (qse_log_t* log) |  | ||||||
| { |  | ||||||
| 	int pri = log->flags & QSE_LOG_MASK_PRIORITY; |  | ||||||
|  |  | ||||||
| 	if (pri < 0 || pri >= QSE_COUNTOF(__priority_names)) return QSE_NULL; |  | ||||||
| 	return __priority_names[pri]; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static QSE_INLINE void __report_over_sio (qse_log_t* log, qse_sio_t* sio, const qse_mchar_t* tm, const qse_char_t* ident, const qse_char_t* fmt, va_list arg) | static QSE_INLINE void __report_over_sio (qse_log_t* log, qse_sio_t* sio, const qse_mchar_t* tm, const qse_char_t* ident, const qse_char_t* fmt, va_list arg) | ||||||
| { | { | ||||||
| 	int id_out = 0; | 	int id_out = 0; | ||||||
| @ -439,7 +459,7 @@ void qse_log_reportv (qse_log_t* log, const qse_char_t* ident, int pri, const qs | |||||||
| 		if (cnow.gmtoff == QSE_TYPE_MIN(int)) | 		if (cnow.gmtoff == QSE_TYPE_MIN(int)) | ||||||
| 		{ | 		{ | ||||||
| 			qse_mbsxfmt (tm, QSE_COUNTOF(tm), | 			qse_mbsxfmt (tm, QSE_COUNTOF(tm), | ||||||
| 				QSE_T("%04.4d-%02d-%02d %02d:%02d:%02d"),  | 				QSE_MT("%04.4d-%02d-%02d %02d:%02d:%02d"),  | ||||||
| 				cnow.year + QSE_BTIME_YEAR_BASE, cnow.mon + 1, cnow.mday,  | 				cnow.year + QSE_BTIME_YEAR_BASE, cnow.mon + 1, cnow.mday,  | ||||||
| 				cnow.hour, cnow.min, cnow.sec); | 				cnow.hour, cnow.min, cnow.sec); | ||||||
| 		} | 		} | ||||||
| @ -449,7 +469,7 @@ void qse_log_reportv (qse_log_t* log, const qse_char_t* ident, int pri, const qs | |||||||
| 			gmtoff_hour = cnow.gmtoff / QSE_SECS_PER_HOUR; | 			gmtoff_hour = cnow.gmtoff / QSE_SECS_PER_HOUR; | ||||||
| 			gmtoff_min = (cnow.gmtoff % QSE_SECS_PER_HOUR) / QSE_SECS_PER_MIN; | 			gmtoff_min = (cnow.gmtoff % QSE_SECS_PER_HOUR) / QSE_SECS_PER_MIN; | ||||||
| 			qse_mbsxfmt (tm, QSE_COUNTOF(tm), | 			qse_mbsxfmt (tm, QSE_COUNTOF(tm), | ||||||
| 				QSE_T("%04.4d-%02d-%02d %02d:%02d:%02d %c%02d%02d"),  | 				QSE_MT("%04.4d-%02d-%02d %02d:%02d:%02d %c%02d%02d"),  | ||||||
| 				cnow.year + QSE_BTIME_YEAR_BASE, cnow.mon + 1, cnow.mday,  | 				cnow.year + QSE_BTIME_YEAR_BASE, cnow.mon + 1, cnow.mday,  | ||||||
| 				cnow.hour, cnow.min, cnow.sec,  | 				cnow.hour, cnow.min, cnow.sec,  | ||||||
| 				((cnow.gmtoff > 0)? QSE_T('+'): QSE_T('-')), | 				((cnow.gmtoff > 0)? QSE_T('+'): QSE_T('-')), | ||||||
| @ -488,7 +508,7 @@ void qse_log_reportv (qse_log_t* log, const qse_char_t* ident, int pri, const qs | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (log->flags & (QSE_LOG_SYSLOG | QSE_LOG_SYSLOG_LOCAL | QSE_LOG_SYSLOG_REMOTE)) | 	if (log->flags & (QSE_LOG_SYSLOG | QSE_LOG_SYSLOG_REMOTE)) | ||||||
| 	{ | 	{ | ||||||
| 		va_list xap; | 		va_list xap; | ||||||
| 		qse_size_t fplen, fpdlen, fpdilen; | 		qse_size_t fplen, fpdlen, fpdilen; | ||||||
| @ -560,7 +580,7 @@ void qse_log_reportv (qse_log_t* log, const qse_char_t* ident, int pri, const qs | |||||||
| 		if (qse_mbs_vfcat (log->dmsgbuf, fmt, xap) == (qse_size_t)-1) goto done; | 		if (qse_mbs_vfcat (log->dmsgbuf, fmt, xap) == (qse_size_t)-1) goto done; | ||||||
| 	#else | 	#else | ||||||
| 		if (qse_wcs_vfmt (log->wmsgbuf, fmt, xap) == (qse_size_t)-1 || | 		if (qse_wcs_vfmt (log->wmsgbuf, fmt, xap) == (qse_size_t)-1 || | ||||||
| 		    qse_mbs_vfcat (log->dmsgbuf, QSE_MT("%.*ls"), QSE_WCS_LEN(log->wmsgbuf), QSE_WCS_PTR(log->wmsgbuf)) == (qse_size_t)-1) goto done; | 		    qse_mbs_fcat (log->dmsgbuf, QSE_MT("%.*ls"), QSE_WCS_LEN(log->wmsgbuf), QSE_WCS_PTR(log->wmsgbuf)) == (qse_size_t)-1) goto done; | ||||||
| 	#endif | 	#endif | ||||||
|  |  | ||||||
| 		if (log->flags & QSE_LOG_SYSLOG)  | 		if (log->flags & QSE_LOG_SYSLOG)  | ||||||
| @ -578,9 +598,8 @@ void qse_log_reportv (qse_log_t* log, const qse_char_t* ident, int pri, const qs | |||||||
| 			#if defined(QSE_CHAR_IS_MCHAR) | 			#if defined(QSE_CHAR_IS_MCHAR) | ||||||
| 				openlog (log->ident, sl_opt, log->syslog_facility); | 				openlog (log->ident, sl_opt, log->syslog_facility); | ||||||
| 			#else | 			#else | ||||||
| 				qse_mchar_t idbuf[QSE_LOG_IDENT_MAX * 2 + 1]; | 				qse_mbsxfmt (log->mident, QSE_COUNTOF(log->mident), QSE_MT("%ls"), log->ident); | ||||||
| 				qse_mbsxfmt (idbuf, QSE_COUNTOF(idbuf), QSE_MT("%ls"), log->ident); | 				openlog (log->mident, sl_opt, log->syslog_facility); | ||||||
| 				openlog (idbuf, sl_opt, log->syslog_facility); |  | ||||||
| 			#endif | 			#endif | ||||||
| 				log->t.syslog.opened = 1; | 				log->t.syslog.opened = 1; | ||||||
| 			} | 			} | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user