[vlc-devel] [PATCH] messages.c: added logging via OutputDebugString under windows.

Rafaël Carré funman at videolan.org
Wed Dec 21 10:16:19 CET 2011


Le Wed, 21 Dec 2011 08:01:59 +0100,
Rémi Denis-Courmont <remi at remlab.net> a écrit :

> On Tue, 20 Dec 2011 22:09:33 -0500, Sergey Radionov <RSATom at gmail.com>
> wrote:
> > Signed-off-by: Rafaël Carré <funman at videolan.org>
> > ---
> >  src/misc/messages.c |   38 ++++++++++++++++++++++++++++++++++++++
> >  1 files changed, 38 insertions(+), 0 deletions(-)
> > 
> > diff --git a/src/misc/messages.c b/src/misc/messages.c
> > index 8c0b723..e6b6aeb 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 (0, type, &msg, format, dol);
> 
> Please don't use 0 as a pointer.
> 
> > +    va_end (dol);
> > +#endif
> > +
> >      vlc_rwlock_rdlock (&msg_lock);
> >      for (msg_subscription_t *sub = msg_head; sub != NULL; sub =
> sub->next)
> >      {
> > @@ -303,3 +314,30 @@ 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 < 0 || *pverbose < (type - VLC_MSG_ERR))
> > +        return;
> 
> Did you actually test this? It looks like *NULL to me.

Not yet, vlc exited before calling msg_* (or did it dereference NULL and 
exited without segfaulting?)

I will let Sergey send another patch.

Btw this was Sergey patch, I'm not sure how I should use git send-email with
a patch of someone else

> > +
> > +    size_t fmt_len = strlen(format);
> > +    char *fmt_cr = malloc(fmt_len + 1 + 1);
> > +    if (!fmt_cr)
> > +        return;
> > +
> > +    strcpy(fmt_cr, format);
> > +    fmt_cr[fmt_len] = '\n';
> > +    fmt_cr[fmt_len + 1] = '\0';
> > +    char *msg;
> > +    if (vasprintf(&msg, fmt_cr, dol))
> > +        msg = NULL;
> > +
> > +    if (msg)
> > +        OutputDebugString(msg);
> > +    free(fmt_cr);
> > +    free(msg);
> > +}
> > +#endif
> 



-- 
Rafaël Carré



More information about the vlc-devel mailing list