]> git.sesse.net Git - vlc/commitdiff
vlc_list_children: list children _safely_
authorRémi Denis-Courmont <rem@videolan.org>
Fri, 16 May 2008 15:23:09 +0000 (18:23 +0300)
committerRémi Denis-Courmont <rem@videolan.org>
Fri, 16 May 2008 15:23:09 +0000 (18:23 +0300)
include/vlc_objects.h
src/libvlccore.sym
src/misc/objects.c

index c211b2283249bd4f2651a0479e736e5c8e431270..575e0ecad951efffe040d559bd5c775f1aa724c6 100644 (file)
@@ -111,6 +111,7 @@ VLC_EXPORT( void *, __vlc_object_find_name, ( vlc_object_t *, const char *, int
 VLC_EXPORT( void, __vlc_object_yield, ( vlc_object_t * ) );
 VLC_EXPORT( void, __vlc_object_release, ( vlc_object_t * ) );
 VLC_EXPORT( vlc_list_t *, __vlc_list_find, ( vlc_object_t *, int, int ) );
+VLC_EXPORT( vlc_list_t *, __vlc_list_children, ( vlc_object_t * ) );
 VLC_EXPORT( void, vlc_list_release, ( vlc_list_t * ) );
 
 /* __vlc_object_dump */
@@ -145,6 +146,9 @@ VLC_EXPORT( void, __vlc_object_dump, ( vlc_object_t *p_this ) );
 #define vlc_list_find(a,b,c) \
     __vlc_list_find( VLC_OBJECT(a),b,c)
 
+#define vlc_list_children(a) \
+    __vlc_list_children( VLC_OBJECT(a) )
+
 #define vlc_object_dump(a) \
     __vlc_object_dump( VLC_OBJECT(a))
 
index 99be574e7712064b04219b3fac6b3e7b0bd6f021..31f21055b4cf9dcac796627466b7084c295acc53 100644 (file)
@@ -405,6 +405,7 @@ vlc_getnameinfo
 vlc_iconv
 vlc_iconv_close
 vlc_iconv_open
+__vlc_list_children
 __vlc_list_find
 vlc_list_release
 vlc_lldiv
index 4c6547d07c4f50f9841418444f41a92fe5622e40..851f1bdcd1a8caddfbb8cde0bc4f51b7d3d0eeaa 100644 (file)
@@ -1021,6 +1021,26 @@ vlc_list_t * __vlc_list_find( vlc_object_t *p_this, int i_type, int i_mode )
     return p_list;
 }
 
+/**
+ * Gets the list of children of an objects, and increment their reference
+ * count.
+ * @return a list (possibly empty) or NULL in case of error.
+ */
+vlc_list_t *__vlc_list_children( vlc_object_t *obj )
+{
+    vlc_list_t *l;
+
+    vlc_mutex_lock( &structure_lock );
+    l = NewList( obj->i_children );
+    for (int i = 0; i < l->i_count; i++)
+    {
+        vlc_object_yield( obj->pp_children[i] );
+        l->p_values[i].p_object = obj->pp_children[i];
+    }
+    vlc_mutex_unlock( &structure_lock );
+    return l;
+}
+
 /*****************************************************************************
  * DumpCommand: print the current vlc structure
  *****************************************************************************