X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fcontrol%2Fmedia_list.c;h=8dc7e0c6ae6a585cb7d24d265e1d1888f4556d26;hb=8211292f1c6339fd716831be155cdf1374cc2997;hp=5fa32527b79bd15478387ed3d05b741fb7241a86;hpb=5b5a735b1af785b10d7b0e79dab4f24ed8ae9b40;p=vlc diff --git a/src/control/media_list.c b/src/control/media_list.c index 5fa32527b7..8dc7e0c6ae 100644 --- a/src/control/media_list.c +++ b/src/control/media_list.c @@ -21,6 +21,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + #include #include @@ -120,20 +124,17 @@ notify_item_deletion( libvlc_media_list_t * p_mlist, /************************************************************************** * static mlist_is_writable (private) - * - * Raise exception and return 0 when the media_list instance is read-only, - * or else return 1. **************************************************************************/ static inline -int mlist_is_writable( libvlc_media_list_t *p_mlist, libvlc_exception_t *p_e ) +bool mlist_is_writable( libvlc_media_list_t *p_mlist ) { if( !p_mlist||p_mlist->b_read_only ) { /* We are read-only from user side */ - libvlc_exception_raise( p_e, "Cannot write to read-only media list." ); - return 0; + libvlc_printerr( "Attempt to write a read-only media list" ); + return false; } - return 1; + return true; } /* @@ -146,37 +147,37 @@ int mlist_is_writable( libvlc_media_list_t *p_mlist, libvlc_exception_t *p_e ) * Init an object. **************************************************************************/ libvlc_media_list_t * -libvlc_media_list_new( libvlc_instance_t * p_inst, - libvlc_exception_t * p_e ) +libvlc_media_list_new( libvlc_instance_t * p_inst ) { libvlc_media_list_t * p_mlist; p_mlist = malloc(sizeof(libvlc_media_list_t)); - if( !p_mlist ) + if( unlikely(p_mlist == NULL) ) + { + libvlc_printerr( "Not enough memory" ); return NULL; + } p_mlist->p_libvlc_instance = p_inst; - p_mlist->p_event_manager = libvlc_event_manager_new( p_mlist, p_inst, p_e ); + p_mlist->p_event_manager = libvlc_event_manager_new( p_mlist, p_inst ); + if( unlikely(p_mlist->p_event_manager == NULL) ) + { + free(p_mlist); + return NULL; + } /* Code for that one should be handled in flat_media_list.c */ p_mlist->p_flat_mlist = NULL; p_mlist->b_read_only = false; libvlc_event_manager_register_event_type( p_mlist->p_event_manager, - libvlc_MediaListItemAdded, p_e ); + libvlc_MediaListItemAdded ); libvlc_event_manager_register_event_type( p_mlist->p_event_manager, - libvlc_MediaListWillAddItem, p_e ); + libvlc_MediaListWillAddItem ); libvlc_event_manager_register_event_type( p_mlist->p_event_manager, - libvlc_MediaListItemDeleted, p_e ); + libvlc_MediaListItemDeleted ); libvlc_event_manager_register_event_type( p_mlist->p_event_manager, - libvlc_MediaListWillDeleteItem, p_e ); - - if( libvlc_exception_raised( p_e ) ) - { - libvlc_event_manager_release( p_mlist->p_event_manager ); - free( p_mlist ); - return NULL; - } + libvlc_MediaListWillDeleteItem ); vlc_mutex_init( &p_mlist->object_lock ); vlc_mutex_init( &p_mlist->refcount_lock ); // FIXME: spinlock? @@ -241,10 +242,9 @@ void libvlc_media_list_retain( libvlc_media_list_t * p_mlist ) /************************************************************************** * add_file_content (Public) **************************************************************************/ -void +int libvlc_media_list_add_file_content( libvlc_media_list_t * p_mlist, - const char * psz_uri, - libvlc_exception_t * p_e ) + const char * psz_uri ) { input_item_t * p_input_item; libvlc_media_t * p_md; @@ -255,38 +255,36 @@ libvlc_media_list_add_file_content( libvlc_media_list_t * p_mlist, if( !p_input_item ) { - libvlc_exception_raise( p_e, "Can't create an input item" ); - return; + libvlc_printerr( "Not enough memory" ); + return -1; } - p_md = libvlc_media_new_from_input_item( - p_mlist->p_libvlc_instance, - p_input_item, p_e ); - + p_md = libvlc_media_new_from_input_item( p_mlist->p_libvlc_instance, + p_input_item ); if( !p_md ) { vlc_gc_decref( p_input_item ); - return; + return -1; } - libvlc_media_list_add_media( p_mlist, p_md, p_e ); - if( libvlc_exception_raised( p_e ) ) - return; - - input_Read( p_mlist->p_libvlc_instance->p_libvlc_int, p_input_item, true ); + if( libvlc_media_list_add_media( p_mlist, p_md ) ) + { +#warning Missing error handling! + /* printerr and leaks */ + return -1; + } - return; + input_Read( p_mlist->p_libvlc_instance->p_libvlc_int, p_input_item ); + return 0; } /************************************************************************** * set_media (Public) **************************************************************************/ void libvlc_media_list_set_media( libvlc_media_list_t * p_mlist, - libvlc_media_t * p_md, - libvlc_exception_t * p_e) + libvlc_media_t * p_md ) { - VLC_UNUSED(p_e); vlc_mutex_lock( &p_mlist->object_lock ); libvlc_media_release( p_mlist->p_md ); libvlc_media_retain( p_md ); @@ -304,11 +302,9 @@ void libvlc_media_list_set_media( libvlc_media_list_t * p_mlist, * media. **************************************************************************/ libvlc_media_t * -libvlc_media_list_media( libvlc_media_list_t * p_mlist, - libvlc_exception_t * p_e) +libvlc_media_list_media( libvlc_media_list_t * p_mlist ) { libvlc_media_t *p_md; - VLC_UNUSED(p_e); vlc_mutex_lock( &p_mlist->object_lock ); p_md = p_mlist->p_md; @@ -322,12 +318,10 @@ libvlc_media_list_media( libvlc_media_list_t * p_mlist, /************************************************************************** * libvlc_media_list_count (Public) * - * Lock should be hold when entering. + * Lock should be held when entering. **************************************************************************/ -int libvlc_media_list_count( libvlc_media_list_t * p_mlist, - libvlc_exception_t * p_e ) +int libvlc_media_list_count( libvlc_media_list_t * p_mlist ) { - VLC_UNUSED(p_e); return vlc_array_count( &p_mlist->items ); } @@ -336,22 +330,19 @@ int libvlc_media_list_count( libvlc_media_list_t * p_mlist, * * Lock should be held when entering. **************************************************************************/ -void libvlc_media_list_add_media( - libvlc_media_list_t * p_mlist, - libvlc_media_t * p_md, - libvlc_exception_t * p_e ) +int libvlc_media_list_add_media( libvlc_media_list_t * p_mlist, + libvlc_media_t * p_md ) { - if( mlist_is_writable(p_mlist,p_e) ) - _libvlc_media_list_add_media( p_mlist, p_md, p_e ); + if( !mlist_is_writable(p_mlist) ) + return -1; + _libvlc_media_list_add_media( p_mlist, p_md ); + return 0; } /* LibVLC internal version */ -void _libvlc_media_list_add_media( - libvlc_media_list_t * p_mlist, - libvlc_media_t * p_md, - libvlc_exception_t * p_e ) +void _libvlc_media_list_add_media( libvlc_media_list_t * p_mlist, + libvlc_media_t * p_md ) { - VLC_UNUSED(p_e); libvlc_media_retain( p_md ); notify_item_addition( p_mlist, p_md, vlc_array_count( &p_mlist->items ), @@ -366,24 +357,22 @@ void _libvlc_media_list_add_media( * * Lock should be hold when entering. **************************************************************************/ -void libvlc_media_list_insert_media( - libvlc_media_list_t * p_mlist, - libvlc_media_t * p_md, - int index, - libvlc_exception_t * p_e ) +int libvlc_media_list_insert_media( libvlc_media_list_t * p_mlist, + libvlc_media_t * p_md, + int index ) { - if( mlist_is_writable(p_mlist,p_e) ) - _libvlc_media_list_insert_media( p_mlist, p_md, index, p_e ); + if( !mlist_is_writable(p_mlist) ) + return -1; + _libvlc_media_list_insert_media( p_mlist, p_md, index ); + return 0; } /* LibVLC internal version */ void _libvlc_media_list_insert_media( libvlc_media_list_t * p_mlist, libvlc_media_t * p_md, - int index, - libvlc_exception_t * p_e ) + int index ) { - VLC_UNUSED(p_e); libvlc_media_retain( p_md ); notify_item_addition( p_mlist, p_md, index, EventWillHappen ); @@ -396,25 +385,24 @@ void _libvlc_media_list_insert_media( * * Lock should be held when entering. **************************************************************************/ -void libvlc_media_list_remove_index( libvlc_media_list_t * p_mlist, - int index, - libvlc_exception_t * p_e ) +int libvlc_media_list_remove_index( libvlc_media_list_t * p_mlist, + int index ) { - if( mlist_is_writable(p_mlist,p_e) ) - _libvlc_media_list_remove_index( p_mlist, index, p_e ); + if( !mlist_is_writable(p_mlist) ) + return -1; + return _libvlc_media_list_remove_index( p_mlist, index ); } /* LibVLC internal version */ -void _libvlc_media_list_remove_index( libvlc_media_list_t * p_mlist, - int index, - libvlc_exception_t * p_e ) +int _libvlc_media_list_remove_index( libvlc_media_list_t * p_mlist, + int index ) { libvlc_media_t * p_md; if( index < 0 || index >= vlc_array_count( &p_mlist->items )) { - libvlc_exception_raise( p_e, "Index out of bounds"); - return; + libvlc_printerr( "Index out of bounds" ); + return -1; } p_md = vlc_array_item_at_index( &p_mlist->items, index ); @@ -424,6 +412,7 @@ void _libvlc_media_list_remove_index( libvlc_media_list_t * p_mlist, notify_item_deletion( p_mlist, p_md, index, EventDidHappen ); libvlc_media_release( p_md ); + return 0; } /************************************************************************** @@ -433,14 +422,13 @@ void _libvlc_media_list_remove_index( libvlc_media_list_t * p_mlist, **************************************************************************/ libvlc_media_t * libvlc_media_list_item_at_index( libvlc_media_list_t * p_mlist, - int index, - libvlc_exception_t * p_e ) + int index ) { libvlc_media_t * p_md; if( index < 0 || index >= vlc_array_count( &p_mlist->items )) { - libvlc_exception_raise( p_e, "Index out of bounds"); + libvlc_printerr( "Index out of bounds" ); return NULL; } @@ -456,11 +444,8 @@ libvlc_media_list_item_at_index( libvlc_media_list_t * p_mlist, * Warning: this function returns the first matching item. **************************************************************************/ int libvlc_media_list_index_of_item( libvlc_media_list_t * p_mlist, - libvlc_media_t * p_searched_md, - libvlc_exception_t * p_e ) + libvlc_media_t * p_searched_md ) { - VLC_UNUSED(p_e); - libvlc_media_t * p_md; int i; for ( i = 0; i < vlc_array_count( &p_mlist->items ); i++ ) @@ -511,9 +496,7 @@ void libvlc_media_list_unlock( libvlc_media_list_t * p_mlist ) * The p_event_manager is immutable, so you don't have to hold the lock **************************************************************************/ libvlc_event_manager_t * -libvlc_media_list_event_manager( libvlc_media_list_t * p_mlist, - libvlc_exception_t * p_e ) +libvlc_media_list_event_manager( libvlc_media_list_t * p_mlist ) { - VLC_UNUSED(p_e); return p_mlist->p_event_manager; }