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 );
* \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 );
/**@} */
......
......@@ -303,7 +303,7 @@ typedef enum libvlc_event_type_t {
libvlc_MediaInstancePaused,
libvlc_MediaInstanceReachedEnd,
libvlc_MediaInstancePositionChanged,
libvlc_MediaListItemAdded,
libvlc_MediaListItemDeleted,
......
......@@ -26,6 +26,8 @@
#include <vlc_interface.h>
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;
......
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