From 6c2286c22b6074320338c085d78d4a795478c1c3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Wed, 3 Feb 2010 20:06:21 +0200 Subject: [PATCH] Remove some exceptions in media_list --- include/vlc/libvlc_media_list.h | 34 +++++++--------- src/control/media.c | 2 +- src/control/media_discoverer.c | 4 +- src/control/media_list.c | 65 ++++++++++++++----------------- src/control/media_list_internal.h | 5 +-- src/control/media_list_path.h | 6 +-- test/libvlc/media_list.c | 55 +++++++++++++------------- 7 files changed, 80 insertions(+), 91 deletions(-) diff --git a/include/vlc/libvlc_media_list.h b/include/vlc/libvlc_media_list.h index 860483d5fb..5e833720da 100644 --- a/include/vlc/libvlc_media_list.h +++ b/include/vlc/libvlc_media_list.h @@ -103,12 +103,10 @@ VLC_PUBLIC_API libvlc_media_t * * * \param p_ml a media list instance * \param p_mi a media instance - * \param p_e initialized exception object + * \return 0 on success, -1 if the media list is read-only */ -VLC_PUBLIC_API void - libvlc_media_list_add_media( libvlc_media_list_t *, - libvlc_media_t *, - libvlc_exception_t * ); +VLC_PUBLIC_API int +libvlc_media_list_add_media( libvlc_media_list_t *, libvlc_media_t * ); /** * Insert media instance in media list on a position @@ -117,24 +115,22 @@ VLC_PUBLIC_API void * \param p_ml a media list instance * \param p_mi a media instance * \param i_pos position in array where to insert - * \param p_e initialized exception object + * \return 0 on success, -1 if the media list si read-only */ -VLC_PUBLIC_API void - libvlc_media_list_insert_media( libvlc_media_list_t *, - libvlc_media_t *, - int, - libvlc_exception_t * ); +VLC_PUBLIC_API int +libvlc_media_list_insert_media( libvlc_media_list_t *, + libvlc_media_t *, int ); + /** * Remove media instance from media list on a position * The libvlc_media_list_lock should be held upon entering this function. * * \param p_ml a media list instance * \param i_pos position in array where to insert - * \param p_e initialized exception object + * \return 0 on success, -1 if the list is read-only or the item was not found */ -VLC_PUBLIC_API void - libvlc_media_list_remove_index( libvlc_media_list_t *, int, - libvlc_exception_t * ); +VLC_PUBLIC_API int +libvlc_media_list_remove_index( libvlc_media_list_t *, int ); /** * Get count on media list items @@ -152,12 +148,12 @@ VLC_PUBLIC_API int * * \param p_ml a media list instance * \param i_pos position in array where to insert - * \param p_e initialized exception object - * \return media instance at position i_pos and libvlc_media_retain() has been called to increase the refcount on this object. + * \return media instance at position i_pos, or NULL if not found. + * In case of success, libvlc_media_retain() is called to increase the refcount + * on the media. */ VLC_PUBLIC_API libvlc_media_t * - libvlc_media_list_item_at_index( libvlc_media_list_t *, int, - libvlc_exception_t * ); + libvlc_media_list_item_at_index( libvlc_media_list_t *, int ); /** * Find index position of List media instance in media list. * Warning: the function will return the first matched position. diff --git a/src/control/media.c b/src/control/media.c index 2456a49feb..e082e1a94e 100644 --- a/src/control/media.c +++ b/src/control/media.c @@ -106,7 +106,7 @@ static void input_item_subitem_added( const vlc_event_t *p_event, } if( p_md->p_subitems ) { - libvlc_media_list_add_media( p_md->p_subitems, p_md_child, NULL ); + libvlc_media_list_add_media( p_md->p_subitems, p_md_child ); } /* Construct the event */ diff --git a/src/control/media_discoverer.c b/src/control/media_discoverer.c index 37aabf8089..602729f4c0 100644 --- a/src/control/media_discoverer.c +++ b/src/control/media_discoverer.c @@ -118,10 +118,10 @@ static void services_discovery_item_removed( const vlc_event_t * p_event, libvlc_media_list_lock( p_mdis->p_mlist ); for( i = 0; i < count; i++ ) { - p_md = libvlc_media_list_item_at_index( p_mdis->p_mlist, i, NULL ); + p_md = libvlc_media_list_item_at_index( p_mdis->p_mlist, i ); if( p_md->p_input_item == p_item ) { - _libvlc_media_list_remove_index( p_mdis->p_mlist, i, NULL ); + _libvlc_media_list_remove_index( p_mdis->p_mlist, i ); break; } } diff --git a/src/control/media_list.c b/src/control/media_list.c index b9394be2bc..2c83b455d8 100644 --- a/src/control/media_list.c +++ b/src/control/media_list.c @@ -124,21 +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 ); libvlc_printerr( "Attempt to write a read-only media list" ); - return 0; + return false; } - return 1; + return true; } /* @@ -273,9 +269,11 @@ libvlc_media_list_add_file_content( libvlc_media_list_t * p_mlist, return; } - libvlc_media_list_add_media( p_mlist, p_md, p_e ); - if( libvlc_exception_raised( p_e ) ) + if( libvlc_media_list_add_media( p_mlist, p_md ) ) + { + libvlc_exception_raise( p_e ); return; + } input_Read( p_mlist->p_libvlc_instance->p_libvlc_int, p_input_item ); @@ -334,13 +332,13 @@ 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 ); + if( !mlist_is_writable(p_mlist) ) + return -1; + _libvlc_media_list_add_media( p_mlist, p_md ); + return 0; } /* LibVLC internal version */ @@ -361,14 +359,14 @@ void _libvlc_media_list_add_media( libvlc_media_list_t * p_mlist, * * 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 ); + if( !mlist_is_writable(p_mlist) ) + return -1; + _libvlc_media_list_insert_media( p_mlist, p_md, index ); + return 0; } /* LibVLC internal version */ @@ -389,26 +387,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 ); libvlc_printerr( "Index out of bounds" ); - return; + return -1; } p_md = vlc_array_item_at_index( &p_mlist->items, index ); @@ -418,6 +414,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; } /************************************************************************** @@ -427,14 +424,12 @@ 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 ); libvlc_printerr( "Index out of bounds" ); return NULL; } diff --git a/src/control/media_list_internal.h b/src/control/media_list_internal.h index 5852eb590f..72e1e7e611 100644 --- a/src/control/media_list_internal.h +++ b/src/control/media_list_internal.h @@ -64,8 +64,7 @@ void _libvlc_media_list_insert_media( libvlc_media_list_t * p_mlist, libvlc_media_t * p_md, int index ); -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 ); #endif diff --git a/src/control/media_list_path.h b/src/control/media_list_path.h index 1cca9f2fdf..f3565069a0 100644 --- a/src/control/media_list_path.h +++ b/src/control/media_list_path.h @@ -122,7 +122,7 @@ get_path_rec( const libvlc_media_list_path_t path, libvlc_media_list_t * p_curre count = libvlc_media_list_count( p_current_mlist ); for( i = 0; i < count; i++ ) { - libvlc_media_t * p_md = libvlc_media_list_item_at_index( p_current_mlist, i, NULL ); + libvlc_media_t * p_md = libvlc_media_list_item_at_index( p_current_mlist, i ); if( p_md == p_searched_md ) return libvlc_media_list_path_copy_by_appending( path, i ); /* Found! */ @@ -167,7 +167,7 @@ libvlc_media_list_item_at_path( libvlc_media_list_t * p_mlist, const libvlc_medi int i; for( i = 0; path[i] != -1; i++ ) { - p_md = libvlc_media_list_item_at_index( p_current_mlist, path[i], NULL ); + p_md = libvlc_media_list_item_at_index( p_current_mlist, path[i] ); if( p_current_mlist != p_mlist ) libvlc_media_list_release( p_current_mlist ); @@ -209,7 +209,7 @@ libvlc_media_list_parentlist_at_path( libvlc_media_list_t * p_mlist, const libvl return p_current_mlist; } - p_md = libvlc_media_list_item_at_index( p_current_mlist, path[i], NULL ); + p_md = libvlc_media_list_item_at_index( p_current_mlist, path[i] ); p_current_mlist = libvlc_media_subitems( p_md ); libvlc_media_release( p_md ); diff --git a/test/libvlc/media_list.c b/test/libvlc/media_list.c index 70dacd0012..a8e5f02493 100644 --- a/test/libvlc/media_list.c +++ b/test/libvlc/media_list.c @@ -28,6 +28,7 @@ static void test_media_list (const char ** argv, int argc) libvlc_instance_t *vlc; libvlc_media_t *md1, *md2, *md3, *md4; libvlc_media_list_t *ml; + int ret; log ("Testing media_list\n"); @@ -45,30 +46,30 @@ static void test_media_list (const char ** argv, int argc) md3 = libvlc_media_new (vlc, "/dev/null"); assert (md3 != NULL); - libvlc_media_list_add_media (ml, md1, &ex); - catch (); - libvlc_media_list_add_media (ml, md2, &ex); - catch (); + ret = libvlc_media_list_add_media (ml, md1); + assert (!ret); + ret = libvlc_media_list_add_media (ml, md2); + assert (!ret); assert( libvlc_media_list_count (ml) == 2 ); assert( libvlc_media_list_index_of_item (ml, md1) == 0 ); assert( libvlc_media_list_index_of_item (ml, md2) == 1 ); - libvlc_media_list_remove_index (ml, 0, &ex); /* removing first item */ - catch (); + ret = libvlc_media_list_remove_index (ml, 0); /* removing first item */ + assert (!ret); /* test if second item was moved on first place */ assert( libvlc_media_list_index_of_item (ml, md2) == 0 ); - libvlc_media_list_add_media (ml, md1, &ex); /* add 2 items */ - catch (); - libvlc_media_list_add_media (ml, md1, &ex); - catch (); + ret = libvlc_media_list_add_media (ml, md1); /* add 2 items */ + assert (!ret); + ret = libvlc_media_list_add_media (ml, md1); + assert (!ret); /* there should be 3 pieces */ assert( libvlc_media_list_count (ml) == 3 ); - libvlc_media_list_insert_media (ml, md3, 2, &ex); - catch (); + ret = libvlc_media_list_insert_media (ml, md3, 2); + assert (!ret); /* there should be 4 pieces */ assert( libvlc_media_list_count (ml) == 4 ); @@ -77,33 +78,31 @@ static void test_media_list (const char ** argv, int argc) assert( libvlc_media_list_index_of_item (ml, md3) == 2 ); /* test right returning descriptor*/ - assert ( libvlc_media_list_item_at_index (ml, 0, &ex) == md2 ); - catch (); + assert ( libvlc_media_list_item_at_index (ml, 0) == md2 ); - assert ( libvlc_media_list_item_at_index (ml, 2, &ex) == md3 ); - catch (); + assert ( libvlc_media_list_item_at_index (ml, 2) == md3 ); /* test if give exceptions, when it should */ /* have 4 items, so index 4 should give exception */ - libvlc_media_list_remove_index (ml, 4, &ex); - assert (have_exception ()); + ret = libvlc_media_list_remove_index (ml, 4); + assert (ret == -1); - libvlc_media_list_remove_index (ml, 100, &ex); - assert (have_exception ()); + ret = libvlc_media_list_remove_index (ml, 100); + assert (ret == -1); - libvlc_media_list_remove_index (ml, -1, &ex); - assert (have_exception ()); + ret = libvlc_media_list_remove_index (ml, -1); + assert (ret == -1); /* getting non valid items */ libvlc_media_t * p_non_exist = - libvlc_media_list_item_at_index (ml, 4, &ex); - assert (have_exception ()); + libvlc_media_list_item_at_index (ml, 4); + assert (p_non_exist == NULL); - p_non_exist = libvlc_media_list_item_at_index (ml, 100, &ex); - assert (have_exception ()); + p_non_exist = libvlc_media_list_item_at_index (ml, 100); + assert (p_non_exist == NULL); - p_non_exist = libvlc_media_list_item_at_index (ml, -1, &ex); - assert (have_exception ()); + p_non_exist = libvlc_media_list_item_at_index (ml, -1); + assert (p_non_exist == NULL); md4 = libvlc_media_new (vlc, "/dev/null"); assert (md4 != NULL); -- 2.39.2