From 4a2ded0bad747c8d671f2321e8ac9e9c556e1d17 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sun, 21 Oct 2007 07:12:07 +0000 Subject: [PATCH] libvlc_exception: * add missing const qualifiers * prevent exception from being silented in case of ENOMEM --- include/vlc/libvlc.h | 10 +++++++--- include/vlc/libvlc_structures.h | 2 +- src/control/core.c | 14 ++++++++------ 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/include/vlc/libvlc.h b/include/vlc/libvlc.h index 2e06c8ff20..0edc26cf51 100644 --- a/include/vlc/libvlc.h +++ b/include/vlc/libvlc.h @@ -61,14 +61,17 @@ VLC_PUBLIC_API void libvlc_exception_init( libvlc_exception_t *p_exception ); * \param p_exception the exception to query * \return 0 if no exception raised, 1 else */ -VLC_PUBLIC_API int libvlc_exception_raised( libvlc_exception_t *p_exception ); +VLC_PUBLIC_API int +libvlc_exception_raised( const libvlc_exception_t *p_exception ); /** * Raise an exception * \param p_exception the exception to raise * \param psz_message the exception message */ -VLC_PUBLIC_API void libvlc_exception_raise( libvlc_exception_t *p_exception, const char *psz_format, ... ); +VLC_PUBLIC_API void +libvlc_exception_raise( libvlc_exception_t *p_exception, + const char *psz_format, ... ); /** * Clear an exception object so it can be reused. @@ -83,7 +86,8 @@ VLC_PUBLIC_API void libvlc_exception_clear( libvlc_exception_t * ); * \return the exception message or NULL if not applicable (exception not raised * for example) */ -VLC_PUBLIC_API char* libvlc_exception_get_message( libvlc_exception_t *p_exception ); +VLC_PUBLIC_API const char * +libvlc_exception_get_message( const libvlc_exception_t *p_exception ); /**@} */ diff --git a/include/vlc/libvlc_structures.h b/include/vlc/libvlc_structures.h index 7ee11ec60e..ec0abcaa47 100644 --- a/include/vlc/libvlc_structures.h +++ b/include/vlc/libvlc_structures.h @@ -303,7 +303,7 @@ typedef enum libvlc_event_type_t { libvlc_MediaInstancePaused, libvlc_MediaInstanceReachedEnd, libvlc_MediaInstancePositionChanged, - + libvlc_MediaListItemAdded, libvlc_MediaListItemDeleted, diff --git a/src/control/core.c b/src/control/core.c index 657edada62..304fdb0dac 100644 --- a/src/control/core.c +++ b/src/control/core.c @@ -26,6 +26,8 @@ #include +static const char nomemstr[] = "Insufficient memory"; + /************************************************************************* * Exceptions handling *************************************************************************/ @@ -37,18 +39,19 @@ void libvlc_exception_init( libvlc_exception_t *p_exception ) void libvlc_exception_clear( libvlc_exception_t *p_exception ) { - if( p_exception->psz_message ) + if( p_exception->psz_message != nomemstr ) free( p_exception->psz_message ); p_exception->psz_message = NULL; p_exception->b_raised = 0; } -int libvlc_exception_raised( libvlc_exception_t *p_exception ) +int libvlc_exception_raised( const libvlc_exception_t *p_exception ) { return (NULL != p_exception) && p_exception->b_raised; } -char *libvlc_exception_get_message( libvlc_exception_t *p_exception ) +const char * +libvlc_exception_get_message( const libvlc_exception_t *p_exception ) { if( p_exception->b_raised == 1 && p_exception->psz_message ) { @@ -66,12 +69,11 @@ void libvlc_exception_raise( libvlc_exception_t *p_exception, if( p_exception == NULL ) return; /* remove previous exception if it wasn't cleared */ - if( p_exception->b_raised && p_exception->psz_message ) - free(p_exception->psz_message); + libvlc_exception_clear( p_exception ); va_start( args, psz_format ); if( vasprintf( &p_exception->psz_message, psz_format, args ) == -1) - p_exception->psz_message = NULL; + p_exception->psz_message = (char *)nomemstr; va_end( args ); p_exception->b_raised = 1; -- 2.39.2