X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmisc%2Fmessages.c;h=be832c65c87fba5ec3ea54be0cd2c8e3768f2059;hb=4b83963f56efe43365aeeb7aa0a8e5558db65db0;hp=a5a5be9eb5fb86b28439ebbf30865a85f553e1ab;hpb=cdd517525b71b7b5390bfff52db183b09b00f7fe;p=vlc diff --git a/src/misc/messages.c b/src/misc/messages.c index a5a5be9eb5..be832c65c8 100644 --- a/src/misc/messages.c +++ b/src/misc/messages.c @@ -32,7 +32,7 @@ # include "config.h" #endif -#include +#include #include /* 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 ); } }