vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Mon Mar 4 20:23:40 2019 +0200| [b3739d3934100311fe7dfff44fb3645475c54dea] | committer: Rémi Denis-Courmont
messages: separate logging w/ and w/o object As discussed at the last workshop; the main caveat is that the object type string must still be had from something. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b3739d3934100311fe7dfff44fb3645475c54dea --- include/vlc_messages.h | 48 ++++++++++++++++++++++++++++++++++--------- modules/access/http/connmgr.c | 6 ++++-- src/libvlccore.sym | 2 ++ src/misc/messages.c | 36 +++++++++++--------------------- src/misc/objects.c | 27 ++++++++++++++++++++++++ 5 files changed, 83 insertions(+), 36 deletions(-) diff --git a/include/vlc_messages.h b/include/vlc_messages.h index 2cf1b7d2a1..ba0646780f 100644 --- a/include/vlc_messages.h +++ b/include/vlc_messages.h @@ -64,19 +64,38 @@ typedef struct vlc_log_t unsigned long tid; /**< Emitter thread ID */ } vlc_log_t; -VLC_API void vlc_Log(vlc_object_t *obj, int prio, const char *module, - const char *file, unsigned line, const char *func, - const char *format, ...) VLC_FORMAT(7, 8); -VLC_API void vlc_vaLog(vlc_object_t *obj, int prio, const char *module, - const char *file, unsigned line, const char *func, - const char *format, va_list ap); +/** + * Emit a log message. + * + * \param obj VLC object emitting the message or NULL + * \param type VLC_MSG_* message type (info, error, warning or debug) + * \param module name of module from which the message come + * (normally vlc_module_name) + * \param file source module file name (normally __FILE__) or NULL + * \param line function call source line number (normally __LINE__) or 0 + * \param func calling function name (normally __func__) or NULL + * \param format printf-like message format + */ +VLC_API void vlc_object_Log(vlc_object_t *obj, int prio, const char *module, + const char *file, unsigned line, const char *func, + const char *format, ...) VLC_FORMAT(7, 8); + +/** + * Emit a log message. + * + * This function is the variable argument list equivalent to vlc_object_Log(). + */ +VLC_API void vlc_object_vaLog(vlc_object_t *obj, int prio, const char *module, + const char *file, unsigned line, const char *func, + const char *format, va_list ap); + #define msg_GenericVa(o, p, fmt, ap) \ - vlc_vaLog(VLC_OBJECT(o), p, vlc_module_name, __FILE__, __LINE__, \ - __func__, fmt, ap) + vlc_object_vaLog(VLC_OBJECT(o), p, vlc_module_name, __FILE__, __LINE__, \ + __func__, fmt, ap) #define msg_Generic(o, p, ...) \ - vlc_Log(VLC_OBJECT(o), p, vlc_module_name, __FILE__, __LINE__, \ - __func__, __VA_ARGS__) + vlc_object_Log(VLC_OBJECT(o), p, vlc_module_name, __FILE__, __LINE__, \ + __func__, __VA_ARGS__) #define msg_Info(p_this, ...) \ msg_Generic(p_this, VLC_MSG_INFO, __VA_ARGS__) #define msg_Err(p_this, ...) \ @@ -100,6 +119,15 @@ VLC_API const char *vlc_strerror_c(int); struct vlc_logger; +VLC_API void vlc_Log(struct vlc_logger *const *logger, int prio, + const char *type, const char *module, + const char *file, unsigned line, const char *func, + const char *format, ...) VLC_FORMAT(8, 9); +VLC_API void vlc_vaLog(struct vlc_logger *const *logger, int prio, + const char *type, const char *module, + const char *file, unsigned line, const char *func, + const char *format, va_list ap); + /** * Message logging callback signature. * \param data data pointer as provided to vlc_msg_SetCallback(). diff --git a/modules/access/http/connmgr.c b/modules/access/http/connmgr.c index 5f527106a7..e84c862153 100644 --- a/modules/access/http/connmgr.c +++ b/modules/access/http/connmgr.c @@ -39,7 +39,8 @@ void vlc_http_err(void *ctx, const char *fmt, ...) va_list ap; va_start(ap, fmt); - vlc_vaLog(ctx, VLC_MSG_ERR, "http", __FILE__, __LINE__, __func__, fmt, ap); + vlc_object_vaLog(ctx, VLC_MSG_ERR, "http", __FILE__, __LINE__, __func__, + fmt, ap); va_end(ap); } @@ -48,7 +49,8 @@ void vlc_http_dbg(void *ctx, const char *fmt, ...) va_list ap; va_start(ap, fmt); - vlc_vaLog(ctx, VLC_MSG_DBG, "http", __FILE__, __LINE__, __func__, fmt, ap); + vlc_object_vaLog(ctx, VLC_MSG_DBG, "http", __FILE__, __LINE__, __func__, + fmt, ap); va_end(ap); } diff --git a/src/libvlccore.sym b/src/libvlccore.sym index 202a6a1d21..d64cadd249 100644 --- a/src/libvlccore.sym +++ b/src/libvlccore.sym @@ -676,6 +676,8 @@ vlc_object_hold vlc_object_release vlc_object_typename vlc_object_parent +vlc_object_Log +vlc_object_vaLog vlc_once vlc_rand_bytes vlc_drand48 diff --git a/src/misc/messages.c b/src/misc/messages.c index 3de4002be2..2a6e904682 100644 --- a/src/misc/messages.c +++ b/src/misc/messages.c @@ -82,14 +82,12 @@ static void Win32DebugOutputMsg (void *, int , const vlc_log_t *, const char *, va_list); #endif -/** - * Emit a log message. This function is the variable argument list equivalent - * to vlc_Log(). - */ -void vlc_vaLog (vlc_object_t *obj, int type, const char *module, - const char *file, unsigned line, const char *func, - const char *format, va_list args) +void vlc_vaLog(struct vlc_logger *const *loggerp, int type, + const char *typename, const char *module, + const char *file, unsigned line, const char *func, + const char *format, va_list args) { + struct vlc_logger *logger = *loggerp; /* Get basename from the module filename */ char *p = strrchr(module, '/'); if (p != NULL) @@ -108,8 +106,8 @@ void vlc_vaLog (vlc_object_t *obj, int type, const char *module, /* Fill message information fields */ vlc_log_t msg; - msg.i_object_id = (uintptr_t)obj; - msg.psz_object_type = (obj != NULL) ? vlc_object_typename(obj) : "generic"; + msg.i_object_id = (uintptr_t)(void *)loggerp; + msg.psz_object_type = typename; msg.psz_module = module; msg.psz_header = NULL; msg.file = file; @@ -126,29 +124,19 @@ void vlc_vaLog (vlc_object_t *obj, int type, const char *module, #endif /* Pass message to the callback */ - if (obj != NULL) - vlc_vaLogCallback(obj->obj.logger, type, &msg, format, args); + if (logger != NULL) + vlc_vaLogCallback(logger, type, &msg, format, args); } -/** - * Emit a log message. - * \param obj VLC object emitting the message or NULL - * \param type VLC_MSG_* message type (info, error, warning or debug) - * \param module name of module from which the message come - * (normally vlc_module_name) - * \param file source module file name (normally __FILE__) or NULL - * \param line function call source line number (normally __LINE__) or 0 - * \param func calling function name (normally __func__) or NULL - * \param format printf-like message format - */ -void vlc_Log(vlc_object_t *obj, int type, const char *module, +void vlc_Log(struct vlc_logger *const *logger, int type, + const char *typename, const char *module, const char *file, unsigned line, const char *func, const char *format, ... ) { va_list ap; va_start(ap, format); - vlc_vaLog(obj, type, module, file, line, func, format, ap); + vlc_vaLog(logger, type, typename, module, file, line, func, format, ap); va_end(ap); } diff --git a/src/misc/objects.c b/src/misc/objects.c index 855211d47e..ad93799223 100644 --- a/src/misc/objects.c +++ b/src/misc/objects.c @@ -429,6 +429,33 @@ void vlc_object_release (vlc_object_t *obj) } } +void vlc_object_vaLog(vlc_object_t *obj, int prio, const char *module, + const char *file, unsigned line, const char *func, + const char *format, va_list ap) +{ + if (obj == NULL) + return; + + const char *typename = vlc_object_typename(obj); + /* FIXME: libvlc allows NULL type but modules don't */ + if (typename == NULL) + typename = "generic"; + + vlc_vaLog(&obj->obj.logger, prio, typename, module, file, line, func, + format, ap); +} + +void vlc_object_Log(vlc_object_t *obj, int prio, const char *module, + const char *file, unsigned line, const char *func, + const char *format, ...) +{ + va_list ap; + + va_start(ap, format); + vlc_object_vaLog(obj, prio, module, file, line, func, format, ap); + va_end(ap); +} + /** * Lists the children of an object. * _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
