X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcontrol%2Fmedia_list_path.h;h=994587ce56f31ee30145b0ab7713f1beea63b46a;hb=4e4720311a10bf0917cc826369438c6565d56a4f;hp=00216dad432d8e822814ba7f43ecc44214d20830;hpb=e86b51d040e7a95d6f15cc17db8f24c6155568b3;p=vlc diff --git a/src/control/media_list_path.h b/src/control/media_list_path.h index 00216dad43..994587ce56 100644 --- a/src/control/media_list_path.h +++ b/src/control/media_list_path.h @@ -25,12 +25,35 @@ #ifndef _LIBVLC_MEDIA_LIST_PATH_H #define _LIBVLC_MEDIA_LIST_PATH_H 1 +#include +#include + +typedef int * libvlc_media_list_path_t; /* (Media List Player Internal) */ + +/************************************************************************** + * path_dump (Media List Player Internal) + **************************************************************************/ +static inline void libvlc_media_list_path_dump( const libvlc_media_list_path_t path ) +{ + if(!path) + { + printf("NULL path\n"); + return; + } + + int i; + for(i = 0; path[i] != -1; i++) + printf("%s%d", i > 0 ? "/" : "", path[i]); + printf("\n"); +} + /************************************************************************** * path_empty (Media List Player Internal) **************************************************************************/ static inline libvlc_media_list_path_t libvlc_media_list_path_empty( void ) { libvlc_media_list_path_t ret = malloc(sizeof(int)); + assert( ret ); ret[0] = -1; return ret; } @@ -41,6 +64,7 @@ static inline libvlc_media_list_path_t libvlc_media_list_path_empty( void ) static inline libvlc_media_list_path_t libvlc_media_list_path_with_root_index( int index ) { libvlc_media_list_path_t ret = malloc(sizeof(int)*2); + assert( ret ); ret[0] = index; ret[1] = -1; return ret; @@ -49,7 +73,7 @@ static inline libvlc_media_list_path_t libvlc_media_list_path_with_root_index( i /************************************************************************** * path_depth (Media List Player Internal) **************************************************************************/ -static inline int libvlc_media_list_path_depth( libvlc_media_list_path_t path ) +static inline int libvlc_media_list_path_depth( const libvlc_media_list_path_t path ) { int i; for( i = 0; path[i] != -1; i++ ); @@ -62,7 +86,8 @@ static inline int libvlc_media_list_path_depth( libvlc_media_list_path_t path ) static inline void libvlc_media_list_path_append( libvlc_media_list_path_t * p_path, int index ) { int old_depth = libvlc_media_list_path_depth( *p_path ); - *p_path = realloc( *p_path, sizeof(int)*(old_depth+2)); + *p_path = realloc_or_free( *p_path, sizeof(int)*(old_depth+2)); + assert( *p_path ); *p_path[old_depth] = index; *p_path[old_depth+1] = -1; } @@ -70,12 +95,13 @@ static inline void libvlc_media_list_path_append( libvlc_media_list_path_t * p_p /************************************************************************** * path_copy_by_appending (Media List Player Internal) **************************************************************************/ -static inline libvlc_media_list_path_t libvlc_media_list_path_copy_by_appending( libvlc_media_list_path_t path, int index ) +static inline libvlc_media_list_path_t libvlc_media_list_path_copy_by_appending( const libvlc_media_list_path_t path, int index ) { libvlc_media_list_path_t ret; int old_depth = libvlc_media_list_path_depth( path ); - ret = malloc( sizeof(int)*(old_depth+2) ); - memcpy( ret, path, sizeof(int)*(old_depth+2) ); + ret = malloc( sizeof(int) * (old_depth + 2) ); + assert( ret ); + memcpy( ret, path, sizeof(int) * old_depth ); ret[old_depth] = index; ret[old_depth+1] = -1; return ret; @@ -84,11 +110,12 @@ static inline libvlc_media_list_path_t libvlc_media_list_path_copy_by_appending( /************************************************************************** * path_copy (Media List Player Internal) **************************************************************************/ -static inline libvlc_media_list_path_t libvlc_media_list_path_copy( libvlc_media_list_path_t path ) +static inline libvlc_media_list_path_t libvlc_media_list_path_copy( const libvlc_media_list_path_t path ) { libvlc_media_list_path_t ret; int depth = libvlc_media_list_path_depth( path ); ret = malloc( sizeof(int)*(depth+1) ); + assert( ret ); memcpy( ret, path, sizeof(int)*(depth+1) ); return ret; } @@ -97,7 +124,7 @@ static inline libvlc_media_list_path_t libvlc_media_list_path_copy( libvlc_media * get_path_rec (Media List Player Internal) **************************************************************************/ static libvlc_media_list_path_t -get_path_rec( libvlc_media_list_path_t path, libvlc_media_list_t * p_current_mlist, libvlc_media_t * p_searched_md ) +get_path_rec( const libvlc_media_list_path_t path, libvlc_media_list_t * p_current_mlist, libvlc_media_t * p_searched_md ) { int i, count; count = libvlc_media_list_count( p_current_mlist, NULL ); @@ -108,7 +135,7 @@ get_path_rec( libvlc_media_list_path_t path, libvlc_media_list_t * p_current_mli if( p_md == p_searched_md ) return libvlc_media_list_path_copy_by_appending( path, i ); /* Found! */ - libvlc_media_list_t * p_subitems = libvlc_media_subitems( p_md, NULL ); + libvlc_media_list_t * p_subitems = libvlc_media_subitems( p_md ); libvlc_media_release( p_md ); if( p_subitems ) { @@ -141,7 +168,7 @@ static inline libvlc_media_list_path_t libvlc_media_list_path_of_item( libvlc_me * item_at_path (Media List Player Internal) **************************************************************************/ static libvlc_media_t * -libvlc_media_list_item_at_path( libvlc_media_list_t * p_mlist, libvlc_media_list_path_t path ) +libvlc_media_list_item_at_path( libvlc_media_list_t * p_mlist, const libvlc_media_list_path_t path ) { libvlc_media_list_t * p_current_mlist = p_mlist; libvlc_media_t * p_md = NULL; @@ -156,7 +183,7 @@ libvlc_media_list_item_at_path( libvlc_media_list_t * p_mlist, libvlc_media_list if( path[i+1] == -1 ) return p_md; - p_current_mlist = libvlc_media_subitems( p_md, NULL ); + p_current_mlist = libvlc_media_subitems( p_md ); libvlc_media_release( p_md ); if( !p_current_mlist ) @@ -174,7 +201,7 @@ libvlc_media_list_item_at_path( libvlc_media_list_t * p_mlist, libvlc_media_list * parentlist_at_path (Media List Player Internal) **************************************************************************/ static libvlc_media_list_t * -libvlc_media_list_parentlist_at_path( libvlc_media_list_t * p_mlist, libvlc_media_list_path_t path ) +libvlc_media_list_parentlist_at_path( libvlc_media_list_t * p_mlist, const libvlc_media_list_path_t path ) { libvlc_media_list_t * p_current_mlist = p_mlist; libvlc_media_t * p_md = NULL; @@ -185,11 +212,14 @@ libvlc_media_list_parentlist_at_path( libvlc_media_list_t * p_mlist, libvlc_medi libvlc_media_list_release( p_current_mlist ); if( path[i+1] == -1 ) + { + libvlc_media_list_retain(p_current_mlist); return p_current_mlist; + } p_md = libvlc_media_list_item_at_index( p_current_mlist, path[i], NULL ); - p_current_mlist = libvlc_media_subitems( p_md, NULL ); + p_current_mlist = libvlc_media_subitems( p_md ); libvlc_media_release( p_md ); if( !p_current_mlist ) @@ -207,14 +237,14 @@ libvlc_media_list_parentlist_at_path( libvlc_media_list_t * p_mlist, libvlc_medi * sublist_at_path (Media List Player Internal) **************************************************************************/ static libvlc_media_list_t * -libvlc_media_list_sublist_at_path( libvlc_media_list_t * p_mlist, libvlc_media_list_path_t path ) +libvlc_media_list_sublist_at_path( libvlc_media_list_t * p_mlist, const libvlc_media_list_path_t path ) { libvlc_media_list_t * ret; libvlc_media_t * p_md = libvlc_media_list_item_at_path( p_mlist, path ); if( !p_md ) return NULL; - ret = libvlc_media_subitems( p_md, NULL ); + ret = libvlc_media_subitems( p_md ); libvlc_media_release( p_md ); return ret;