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_FILE            (1UL << 21) | ||||
| #define QSE_LOG_SYSLOG          (1UL << 22) | ||||
| #define QSE_LOG_SYSLOG_LOCAL    (1UL << 23) | ||||
| #define QSE_LOG_SYSLOG_REMOTE   (1UL << 24) | ||||
| #define QSE_LOG_SYSLOG_REMOTE   (1UL << 23) | ||||
|  | ||||
| #define QSE_LOG_MASK_PRIORITY 0x00000FFFUL | ||||
| #define QSE_LOG_MASK_OPTION   0x000FF000UL | ||||
| @ -220,6 +219,7 @@ struct qse_log_t | ||||
| 	qse_mbs_t* dmsgbuf; | ||||
| #if defined(QSE_CHAR_IS_WCHAR) | ||||
| 	qse_wcs_t* wmsgbuf; | ||||
| 	qse_mchar_t mident[QSE_LOG_IDENT_MAX * 2 +1]; | ||||
| #endif | ||||
| 	qse_mtx_t mtx; | ||||
|  | ||||
| @ -240,7 +240,7 @@ typedef struct qse_log_target_t qse_log_target_t; | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| qse_log_t* qse_log_open ( | ||||
| QSE_EXPORT qse_log_t* qse_log_open ( | ||||
| 	qse_mmgr_t*               mmgr, | ||||
| 	qse_size_t                xtnsize, | ||||
| 	const qse_char_t*         ident, | ||||
| @ -248,56 +248,76 @@ qse_log_t* qse_log_open ( | ||||
| 	const qse_log_target_t*   target | ||||
| ); | ||||
|  | ||||
| void qse_log_close ( | ||||
| QSE_EXPORT void qse_log_close ( | ||||
| 	qse_log_t*        log | ||||
| ); | ||||
|  | ||||
| void qse_log_setident ( | ||||
| QSE_EXPORT void qse_log_setident ( | ||||
| 	qse_log_t*        log, | ||||
| 	const qse_char_t* ident | ||||
| ); | ||||
|  | ||||
| void qse_log_settarget ( | ||||
| QSE_EXPORT void qse_log_settarget ( | ||||
| 	qse_log_t*              log, | ||||
| 	int                     flags, | ||||
| 	const qse_log_target_t* target | ||||
| ); | ||||
|  | ||||
| int qse_log_gettarget ( | ||||
| QSE_EXPORT int qse_log_gettarget ( | ||||
| 	qse_log_t*        log, | ||||
| 	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, | ||||
| 	int        priority | ||||
| ); | ||||
|  | ||||
| int qse_log_setprioritybyname ( | ||||
| QSE_EXPORT int qse_log_setprioritybyname ( | ||||
| 	qse_log_t*        log, | ||||
| 	const qse_char_t* name | ||||
| ); | ||||
|  | ||||
| void qse_log_setsyslogfacility ( | ||||
| QSE_EXPORT void qse_log_setsyslogfacility ( | ||||
| 	qse_log_t*         log, | ||||
| 	qse_log_facility_t facility | ||||
| ); | ||||
|  | ||||
| int qse_log_setsyslogfacilitybyname ( | ||||
| QSE_EXPORT int qse_log_setsyslogfacilitybyname ( | ||||
| 	qse_log_t*        log, | ||||
| 	const qse_char_t* name | ||||
| ); | ||||
|  | ||||
| int qse_log_getpriority ( | ||||
| 	qse_log_t* log | ||||
| ); | ||||
| #if defined(QSE_HAVE_INLINE) | ||||
| 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 ( | ||||
| 	qse_log_t* log | ||||
| ); | ||||
|  | ||||
|  | ||||
| void qse_log_report ( | ||||
| QSE_EXPORT void qse_log_report ( | ||||
| 	qse_log_t*        log,  | ||||
| 	const qse_char_t* ident, | ||||
| 	int               pri, | ||||
| @ -305,7 +325,7 @@ void qse_log_report ( | ||||
| 	... | ||||
| ); | ||||
|  | ||||
| void qse_log_reportv ( | ||||
| QSE_EXPORT void qse_log_reportv ( | ||||
| 	qse_log_t*        log, | ||||
| 	const qse_char_t* ident, | ||||
| 	int               pri, | ||||
| @ -313,7 +333,7 @@ void qse_log_reportv ( | ||||
| 	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 | ||||
| ); | ||||
|  | ||||
|  | ||||
| @ -53,7 +53,7 @@ static const qse_char_t* __priority_names[] = | ||||
| 	QSE_NULL | ||||
| }; | ||||
|  | ||||
| static const qse_char_t* __syslog_month_names[] = | ||||
| static const qse_mchar_t* __syslog_month_names[] = | ||||
| { | ||||
| 	QSE_MT("Jan"), | ||||
| 	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_SYSLOG) log->flags |= QSE_LOG_SYSLOG; | ||||
| 	if (potflags & QSE_LOG_SYSLOG_LOCAL) log->flags |= QSE_LOG_SYSLOG_LOCAL; | ||||
|  | ||||
| 	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) | ||||
| 	{ | ||||
| 		/* 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 (); | ||||
| 		log->t.syslog.opened = 0; | ||||
| 		/* 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) | ||||
| { | ||||
| #if 0 | ||||
| /* TODO: */ | ||||
| 	if ((log->flags & QSE_LOG_SYSLOG_REMOTE) != 0 && | ||||
| 	    (flags & QSE_LOG_SYSLOG_REMOTE) == 0)  | ||||
| 	if (log->t.syslog_remote.sock >= 0) | ||||
| 	{ | ||||
| 		QSE_CLOSE (log->t.syslog_remote.sock); | ||||
| 		log->t.syslog_remote.sock = -1; | ||||
| 	} | ||||
|  | ||||
| 	if ((log->flags & QSE_LOG_SYSLOG_REMOTE) == 0 && | ||||
| 	    (flags & QSE_LOG_SYSLOG_REMOTE) != 0)  | ||||
| 	if (log->t.console.sio) | ||||
| 	{ | ||||
| 		int sock; | ||||
| 		sock = qse_sckopen (AF_INET, SOCK_DGRAM, 0); | ||||
| 		if (sock == -1) flags &= ~QSE_LOG_SYSLOG_REMOTE; | ||||
| 		else log->t.syslog_remote.sock = sock; | ||||
| 		qse_sio_close (log->t.console.sio); | ||||
| 		log->t.console.sio = QSE_NULL; | ||||
| 	} | ||||
|  | ||||
| 	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 */ | ||||
| 	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_SYSLOG) log->flags |= QSE_LOG_SYSLOG; | ||||
|  | ||||
| 	if (flags & QSE_LOG_SYSLOG_REMOTE) log->flags |= QSE_LOG_SYSLOG_REMOTE; | ||||
| #endif | ||||
| 	if (flags & QSE_LOG_SYSLOG_REMOTE)  | ||||
| 	{ | ||||
| 		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; | ||||
| } | ||||
|  | ||||
|  | ||||
| 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) | ||||
| { | ||||
| 	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) | ||||
| @ -324,6 +348,15 @@ int qse_log_setprioritybyname (qse_log_t* log, const qse_char_t* name) | ||||
| 	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) | ||||
| { | ||||
| #ifndef _WIN32 | ||||
| @ -354,19 +387,6 @@ int qse_log_setsyslogfacilitybyname (qse_log_t* log, const qse_char_t* name) | ||||
| #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) | ||||
| { | ||||
| 	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)) | ||||
| 		{ | ||||
| 			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.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_min = (cnow.gmtoff % QSE_SECS_PER_HOUR) / QSE_SECS_PER_MIN; | ||||
| 			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.hour, cnow.min, cnow.sec,  | ||||
| 				((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; | ||||
| 		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; | ||||
| 	#else | ||||
| 		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 | ||||
|  | ||||
| 		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) | ||||
| 				openlog (log->ident, sl_opt, log->syslog_facility); | ||||
| 			#else | ||||
| 				qse_mchar_t idbuf[QSE_LOG_IDENT_MAX * 2 + 1]; | ||||
| 				qse_mbsxfmt (idbuf, QSE_COUNTOF(idbuf), QSE_MT("%ls"), log->ident); | ||||
| 				openlog (idbuf, sl_opt, log->syslog_facility); | ||||
| 				qse_mbsxfmt (log->mident, QSE_COUNTOF(log->mident), QSE_MT("%ls"), log->ident); | ||||
| 				openlog (log->mident, sl_opt, log->syslog_facility); | ||||
| 			#endif | ||||
| 				log->t.syslog.opened = 1; | ||||
| 			} | ||||
|  | ||||
		Reference in New Issue
	
	Block a user