[vlc-commits] Use same callback prototype for built-in logger as subscribers

Rémi Denis-Courmont git at videolan.org
Fri Aug 19 23:00:13 CEST 2011


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Fri Aug 19 22:44:15 2011 +0300| [b3c5570725ab4880c275881108f35fedf7e68019] | committer: Rémi Denis-Courmont

Use same callback prototype for built-in logger as subscribers

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b3c5570725ab4880c275881108f35fedf7e68019
---

 src/misc/messages.c |   84 ++++++++++++++++++++++++++++++--------------------
 1 files changed, 50 insertions(+), 34 deletions(-)

diff --git a/src/misc/messages.c b/src/misc/messages.c
index 708e50f..a479a03 100644
--- a/src/misc/messages.c
+++ b/src/misc/messages.c
@@ -51,11 +51,6 @@
 #include <vlc_charset.h>
 #include "../libvlc.h"
 
-/*****************************************************************************
- * Local prototypes
- *****************************************************************************/
-static void PrintMsg ( vlc_object_t *, const msg_item_t * );
-
 /**
  * Store all data required by messages interfaces.
  */
@@ -134,6 +129,9 @@ void vlc_Log (vlc_object_t *obj, int type, const char *module,
     va_end (args);
 }
 
+static void PrintColorMsg (void *, const msg_item_t *);
+static void PrintMsg (void *, const msg_item_t *);
+
 /**
  * Emit a log message. This function is the variable argument list equivalent
  * to vlc_Log().
@@ -233,7 +231,13 @@ void vlc_vaLog (vlc_object_t *obj, int type, const char *module,
             break;
         }
 
-    PrintMsg (obj, &msg);
+    /* Pass message to subscribers */
+    libvlc_priv_t *priv = libvlc_priv (obj->p_libvlc);
+
+    if (priv->b_color)
+        PrintColorMsg (&priv->i_verbose, &msg);
+    else
+        PrintMsg (&priv->i_verbose, &msg);
 
     vlc_rwlock_rdlock (&msg_lock);
     for (msg_subscription_t *sub = msg_head; sub != NULL; sub = sub->next)
@@ -244,45 +248,57 @@ void vlc_vaLog (vlc_object_t *obj, int type, const char *module,
         free (str);
 }
 
-/*****************************************************************************
- * PrintMsg: output a standard message item to stderr
- *****************************************************************************
- * Print a message to stderr, with colour formatting if needed.
- *****************************************************************************/
-static void PrintMsg ( vlc_object_t *p_this, const msg_item_t *p_item )
+static const char msg_type[4][9] = { "", " error", " warning", " debug" };
+#define COL(x,y)  "\033[" #x ";" #y "m"
+#define RED     COL(31,1)
+#define GREEN   COL(32,1)
+#define YELLOW  COL(0,33)
+#define WHITE   COL(0,1)
+#define GRAY    "\033[0m"
+static const char msg_color[4][8] = { WHITE, RED, YELLOW, GRAY };
+
+static void PrintColorMsg (void *d, const msg_item_t *p_item)
 {
-#   define COL(x,y)  "\033[" #x ";" #y "m"
-#   define RED     COL(31,1)
-#   define GREEN   COL(32,1)
-#   define YELLOW  COL(0,33)
-#   define WHITE   COL(0,1)
-#   define GRAY    "\033[0m"
-    static const char msgtype[4][9] = { "", " error", " warning", " debug" };
-    static const char msgcolor[4][8] = { WHITE, RED, YELLOW, GRAY };
-
-    libvlc_priv_t *priv = libvlc_priv (p_this->p_libvlc);
+    const int *pverbose = d;
+    FILE *stream = stderr;
     int type = p_item->i_type;
 
-    if (priv->i_verbose < 0 || priv->i_verbose < (type - VLC_MSG_ERR))
+    if (*pverbose < 0 || *pverbose < (type - VLC_MSG_ERR))
         return;
 
-    /* Send the message to stderr */
+    int canc = vlc_savecancel ();
+
+    flockfile (stream);
+    fprintf (stream, "["GREEN"%p"GRAY"] ", (void *)p_item->i_object_id);
+    if (p_item->psz_header != NULL)
+        utf8_fprintf (stream, "[%s] ", p_item->psz_header);
+    utf8_fprintf (stream, "%s %s%s: %s%s"GRAY"\n", p_item->psz_module,
+                  p_item->psz_object_type, msg_type[type], msg_color[type],
+                  p_item->psz_msg);
+#if defined (WIN32) || defined (__OS2__)
+    fflush (stream);
+#endif
+    funlockfile (stream);
+    vlc_restorecancel (canc);
+}
+
+static void PrintMsg (void *d, const msg_item_t *p_item)
+{
+    const int *pverbose = d;
     FILE *stream = stderr;
+    int type = p_item->i_type;
+
+    if (*pverbose < 0 || *pverbose < (type - VLC_MSG_ERR))
+        return;
+
     int canc = vlc_savecancel ();
 
     flockfile (stream);
-    fprintf (stream, priv->b_color ? "["GREEN"%p"GRAY"] " : "[%p] ",
-            (void *)p_item->i_object_id);
+    fprintf (stream, "[%p] ", (void *)p_item->i_object_id);
     if (p_item->psz_header != NULL)
         utf8_fprintf (stream, "[%s] ", p_item->psz_header);
-    utf8_fprintf (stream, "%s %s%s: ", p_item->psz_module,
-                  p_item->psz_object_type, msgtype[type]);
-    if (priv->b_color)
-        fputs (msgcolor[type], stream);
-    fputs (p_item->psz_msg, stream);
-    if (priv->b_color)
-        fputs (GRAY, stream);
-    putc_unlocked ('\n', stream);
+    utf8_fprintf (stream, "%s %s%s: %s\n", p_item->psz_module,
+                  p_item->psz_object_type, msg_type[type], p_item->psz_msg);
 #if defined (WIN32) || defined (__OS2__)
     fflush (stream);
 #endif



More information about the vlc-commits mailing list