From 15769b48c453adb80e7252870850163c799868c9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Thu, 18 May 2017 21:46:31 +0300 Subject: [PATCH] input: add explicit input_item_node_RemoveNode() This is rarely used (only once in the whole code base). --- include/vlc_input_item.h | 6 ++++++ src/input/access.c | 2 ++ src/input/item.c | 11 ++++++++--- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/include/vlc_input_item.h b/include/vlc_input_item.h index c593d65e20..bd6a8fd8d8 100644 --- a/include/vlc_input_item.h +++ b/include/vlc_input_item.h @@ -204,6 +204,12 @@ VLC_API input_item_node_t * input_item_node_AppendItem( input_item_node_t *p_nod VLC_API void input_item_node_AppendNode( input_item_node_t *p_parent, input_item_node_t *p_child ); /** + * Remove a node from its parent. + */ +void input_item_node_RemoveNode( input_item_node_t *parent, + input_item_node_t *child ); + +/** * Delete a node created with input_item_node_Create() and all its children. */ VLC_API void input_item_node_Delete( input_item_node_t *p_node ); diff --git a/src/input/access.c b/src/input/access.c index 8986a25edf..7fca5cff17 100644 --- a/src/input/access.c +++ b/src/input/access.c @@ -617,6 +617,8 @@ static void fsdir_attach_slaves(struct access_fsdir *p_fsdir) * added in the parent node */ if (p_fsdir_slave->p_node != NULL) { + input_item_node_RemoveNode(p_fsdir->p_node, + p_fsdir_slave->p_node); input_item_node_Delete(p_fsdir_slave->p_node); p_fsdir_slave->p_node = NULL; } diff --git a/src/input/item.c b/src/input/item.c index 41a2b98b77..07d980ebc7 100644 --- a/src/input/item.c +++ b/src/input/item.c @@ -1261,9 +1261,7 @@ static void RecursiveNodeDelete( input_item_node_t *p_node ) void input_item_node_Delete( input_item_node_t *p_node ) { if( p_node->p_parent ) - TAB_REMOVE(p_node->p_parent->i_children, p_node->p_parent->pp_children, - p_node); - + input_item_node_RemoveNode(node->p_parent, node); RecursiveNodeDelete( p_node ); } @@ -1294,6 +1292,13 @@ void input_item_node_AppendNode( input_item_node_t *p_parent, input_item_node_t p_child->p_parent = p_parent; } +void input_item_node_RemoveNode( input_item_node_t *parent, + input_item_node_t *child ) +{ + TAB_REMOVE(parent->i_children, parent->pp_children, child); + child->p_parent = NULL; +} + void input_item_node_PostAndDelete( input_item_node_t *p_root ) { vlc_event_send( &p_root->p_item->event_manager, &(vlc_event_t) { -- 2.11.4.GIT