]> git.sesse.net Git - vlc/blobdiff - src/control/media_list_path.h
Use var_Inherit* instead of var_CreateGet*.
[vlc] / src / control / media_list_path.h
index 00216dad432d8e822814ba7f43ecc44214d20830..f3565069a0e8c0431293dfb58d5bc5e4b85680d9 100644 (file)
 #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;