]> git.sesse.net Git - vlc/blobdiff - src/misc/messages.c
Fix the leak caused by the QGridLayout of the FS controller, since it isn't a child...
[vlc] / src / misc / messages.c
index a5a5be9eb5fb86b28439ebbf30865a85f553e1ab..be832c65c87fba5ec3ea54be0cd2c8e3768f2059 100644 (file)
@@ -32,7 +32,7 @@
 # include "config.h"
 #endif
 
-#include <vlc/vlc.h>
+#include <vlc_common.h>
 
 #include <stdarg.h>                                       /* va_list for BSD */
 
@@ -523,8 +523,8 @@ static void PrintMsg ( vlc_object_t * p_this, msg_item_t * p_item )
 #ifdef UNDER_CE
     int i_dummy;
 #endif
-    static const char * ppsz_type[4] = { "", " error", " warning", " debug" };
-    static const char *ppsz_color[4] = { WHITE, RED, YELLOW, GRAY };
+    static const char ppsz_type[4][9] = { "", " error", " warning", " debug" };
+    static const char ppsz_color[4][8] = { WHITE, RED, YELLOW, GRAY };
     const char *psz_object;
     libvlc_priv_t *priv = libvlc_priv (p_this->p_libvlc);
     int i_type = p_item->i_type;
@@ -614,15 +614,24 @@ static msg_context_t* GetContext(void)
     return p_ctx;
 }
 
+void msg_StackDestroy (void *data)
+{
+    msg_context_t *p_ctx = data;
+
+    free (p_ctx->psz_message);
+    free (p_ctx);
+}
+
 void msg_StackSet( int i_code, const char *psz_message, ... )
 {
     va_list ap;
     msg_context_t *p_ctx = GetContext();
-    assert( p_ctx );
 
-    va_start( ap, psz_message );
+    if( p_ctx == NULL )
+        return;
     free( p_ctx->psz_message );
 
+    va_start( ap, psz_message );
     if( vasprintf( &p_ctx->psz_message, psz_message, ap ) == -1 )
         p_ctx->psz_message = NULL;
     va_end( ap );
@@ -635,7 +644,9 @@ void msg_StackAdd( const char *psz_message, ... )
     char *psz_tmp;
     va_list ap;
     msg_context_t *p_ctx = GetContext();
-    assert( p_ctx );
+
+    if( p_ctx == NULL )
+        return;
 
     va_start( ap, psz_message );
     if( vasprintf( &psz_tmp, psz_message, ap ) == -1 )
@@ -646,14 +657,13 @@ void msg_StackAdd( const char *psz_message, ... )
         p_ctx->psz_message = psz_tmp;
     else
     {
-        char *psz_old = malloc( strlen( p_ctx->psz_message ) + 1 );
-        memcpy( psz_old, p_ctx->psz_message, strlen( p_ctx->psz_message ) + 1 );
-        p_ctx->psz_message = realloc( p_ctx->psz_message,
-                                      strlen( p_ctx->psz_message ) +
-                                      /* ':', ' ', '0' */
-                                      strlen( psz_tmp ) + 3 );
-        sprintf( p_ctx->psz_message, "%s: %s", psz_tmp, psz_old );
-        free( psz_tmp ); free( psz_old );
+        char *psz_new;
+        if( asprintf( &psz_new, "%s: %s", psz_tmp, p_ctx->psz_message ) == -1 )
+            psz_new = NULL;
+
+        free( p_ctx->psz_message );
+        p_ctx->psz_message = psz_new;
+        free( psz_tmp );
     }
 }