[vlc-devel] [PATCH 1/1] messages.c: added logging via OutputDebugString under windows.
Sergey Radionov
rsatom at gmail.com
Sat Feb 4 17:38:57 CET 2012
2011/12/23 Sergey Radionov <rsatom at gmail.com>:
> ---
> src/misc/messages.c | 43 +++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 43 insertions(+), 0 deletions(-)
>
> diff --git a/src/misc/messages.c b/src/misc/messages.c
> index 8c0b723..66bd62e 100644
> --- a/src/misc/messages.c
> +++ b/src/misc/messages.c
> @@ -132,6 +132,10 @@ void vlc_Log (vlc_object_t *obj, int type, const char *module,
> static void PrintColorMsg (void *, int, const msg_item_t *,
> const char *, va_list);
> static void PrintMsg (void *, int, const msg_item_t *, const char *, va_list);
> +#ifdef WIN32
> +static void Win32DebugOutputMsg (void *, int , const msg_item_t *,
> + const char *, va_list);
> +#endif
>
> /**
> * Emit a log message. This function is the variable argument list equivalent
> @@ -230,6 +234,13 @@ void vlc_vaLog (vlc_object_t *obj, int type, const char *module,
> PrintMsg (&priv->i_verbose, type, &msg, format, ap);
> va_end (ap);
>
> +#ifdef WIN32
> + va_list dol;
> + va_copy (dol, args);
> + Win32DebugOutputMsg (&priv->i_verbose, type, &msg, format, dol);
> + va_end (dol);
> +#endif
> +
> vlc_rwlock_rdlock (&msg_lock);
> for (msg_subscription_t *sub = msg_head; sub != NULL; sub = sub->next)
> {
> @@ -303,3 +314,35 @@ static void PrintMsg (void *d, int type, const msg_item_t *p_item,
> funlockfile (stream);
> vlc_restorecancel (canc);
> }
> +
> +#ifdef WIN32
> +static void Win32DebugOutputMsg (void* d, int type, const msg_item_t *p_item,
> + const char *format, va_list dol)
> +{
> + const signed char *pverbose = d;
> + if (pverbose && (*pverbose < 0 || *pverbose < (type - VLC_MSG_ERR)))
> + return;
> +
> + va_list dol2;
> + va_copy (dol2, dol);
> + int msg_len = vsnprintf(NULL, 0, format, dol2);
> + va_end (dol2);
> +
> + if(msg_len <= 0)
> + return;
> +
> + char *msg = malloc(msg_len + 1 + 1);
> + if (!msg)
> + return;
> +
> + msg_len = vsnprintf(msg, msg_len+1, format, dol);
> + if (msg_len > 0){
> + if(msg[msg_len-1] != '\n'){
> + msg[msg_len] = '\n';
> + msg[msg_len + 1] = '\0';
> + }
> + OutputDebugString(msg);
> + }
> + free(msg);
> +}
> +#endif
> --
> 1.7.7.1.msysgit.0
>
What do you think about backporting it to 2.0?
More information about the vlc-devel
mailing list