X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fcontrol%2Fmedia_list_path.h;h=f3565069a0e8c0431293dfb58d5bc5e4b85680d9;hb=12ade3e3bc975d5426ba4af155b7372c31093b31;hp=00216dad432d8e822814ba7f43ecc44214d20830;hpb=174f75debc6ff4b0b3a7037bc21e7b77bfe2a9d8;p=vlc diff --git a/src/control/media_list_path.h b/src/control/media_list_path.h index 00216dad43..f3565069a0 100644 --- a/src/control/media_list_path.h +++ b/src/control/media_list_path.h @@ -25,12 +25,31 @@ #ifndef _LIBVLC_MEDIA_LIST_PATH_H #define _LIBVLC_MEDIA_LIST_PATH_H 1 +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)); + libvlc_media_list_path_t ret = xmalloc(sizeof(int)); ret[0] = -1; return ret; } @@ -40,7 +59,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); + libvlc_media_list_path_t ret = xmalloc(sizeof(int)*2); ret[0] = index; ret[1] = -1; return ret; @@ -49,7 +68,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 +81,7 @@ 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 = xrealloc( *p_path, sizeof(int)*(old_depth+2)); *p_path[old_depth] = index; *p_path[old_depth+1] = -1; } @@ -70,12 +89,12 @@ 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 = xmalloc( sizeof(int) * (old_depth + 2) ); + memcpy( ret, path, sizeof(int) * old_depth ); ret[old_depth] = index; ret[old_depth+1] = -1; return ret; @@ -84,11 +103,11 @@ 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) ); + ret = xmalloc( sizeof(int)*(depth+1) ); memcpy( ret, path, sizeof(int)*(depth+1) ); return ret; } @@ -97,18 +116,18 @@ 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 ); + 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! */ - 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,14 +160,14 @@ 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; 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 ); @@ -156,7 +175,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 +193,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 +204,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_md = libvlc_media_list_item_at_index( p_current_mlist, path[i] ); - 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 +229,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;