Commit 4a2ded0b authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

libvlc_exception:

 * add missing const qualifiers
 * prevent exception from being silented in case of ENOMEM
parent 086d0746
...@@ -61,14 +61,17 @@ VLC_PUBLIC_API void libvlc_exception_init( libvlc_exception_t *p_exception ); ...@@ -61,14 +61,17 @@ VLC_PUBLIC_API void libvlc_exception_init( libvlc_exception_t *p_exception );
* \param p_exception the exception to query * \param p_exception the exception to query
* \return 0 if no exception raised, 1 else * \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 * Raise an exception
* \param p_exception the exception to raise * \param p_exception the exception to raise
* \param psz_message the exception message * \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. * Clear an exception object so it can be reused.
...@@ -83,7 +86,8 @@ VLC_PUBLIC_API void libvlc_exception_clear( libvlc_exception_t * ); ...@@ -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 * \return the exception message or NULL if not applicable (exception not raised
* for example) * 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 );
/**@} */ /**@} */
......
...@@ -303,7 +303,7 @@ typedef enum libvlc_event_type_t { ...@@ -303,7 +303,7 @@ typedef enum libvlc_event_type_t {
libvlc_MediaInstancePaused, libvlc_MediaInstancePaused,
libvlc_MediaInstanceReachedEnd, libvlc_MediaInstanceReachedEnd,
libvlc_MediaInstancePositionChanged, libvlc_MediaInstancePositionChanged,
libvlc_MediaListItemAdded, libvlc_MediaListItemAdded,
libvlc_MediaListItemDeleted, libvlc_MediaListItemDeleted,
......
...@@ -26,6 +26,8 @@ ...@@ -26,6 +26,8 @@
#include <vlc_interface.h> #include <vlc_interface.h>
static const char nomemstr[] = "Insufficient memory";
/************************************************************************* /*************************************************************************
* Exceptions handling * Exceptions handling
*************************************************************************/ *************************************************************************/
...@@ -37,18 +39,19 @@ void libvlc_exception_init( libvlc_exception_t *p_exception ) ...@@ -37,18 +39,19 @@ void libvlc_exception_init( libvlc_exception_t *p_exception )
void libvlc_exception_clear( 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 ); free( p_exception->psz_message );
p_exception->psz_message = NULL; p_exception->psz_message = NULL;
p_exception->b_raised = 0; 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; 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 ) if( p_exception->b_raised == 1 && p_exception->psz_message )
{ {
...@@ -66,12 +69,11 @@ void libvlc_exception_raise( libvlc_exception_t *p_exception, ...@@ -66,12 +69,11 @@ void libvlc_exception_raise( libvlc_exception_t *p_exception,
if( p_exception == NULL ) return; if( p_exception == NULL ) return;
/* remove previous exception if it wasn't cleared */ /* remove previous exception if it wasn't cleared */
if( p_exception->b_raised && p_exception->psz_message ) libvlc_exception_clear( p_exception );
free(p_exception->psz_message);
va_start( args, psz_format ); va_start( args, psz_format );
if( vasprintf( &p_exception->psz_message, psz_format, args ) == -1) if( vasprintf( &p_exception->psz_message, psz_format, args ) == -1)
p_exception->psz_message = NULL; p_exception->psz_message = (char *)nomemstr;
va_end( args ); va_end( args );
p_exception->b_raised = 1; p_exception->b_raised = 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment