From 5a989669c617078efd638d0a4edd3d51d929a349 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Stenac?= <zorglub@videolan.org>
Date: Sun, 19 Nov 2006 16:12:43 +0000
Subject: [PATCH] Input options inheritance in directory access (Closes:#353)

---
 modules/access/directory.c | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/modules/access/directory.c b/modules/access/directory.c
index abc6f3a2f205..1e14ff9b6f7f 100644
--- a/modules/access/directory.c
+++ b/modules/access/directory.c
@@ -125,7 +125,7 @@ static int DemuxControl( demux_t *p_demux, int i_query, va_list args );
 
 
 static int ReadDir( playlist_t *, const char *psz_name, int i_mode,
-                    playlist_item_t *, playlist_item_t * );
+                    playlist_item_t *, playlist_item_t *, input_item_t * );
 
 /*****************************************************************************
  * Open: open the directory
@@ -184,8 +184,9 @@ static int Read( access_t *p_access, uint8_t *p_buffer, int i_len)
     playlist_item_t    *p_item_in_category;
     input_item_t       *p_current_input = ( (input_thread_t*)p_access->p_parent)
                                                        ->input.p_item;
-    playlist_item_t    *p_current =
-                    playlist_ItemGetByInput( p_playlist, p_current_input, VLC_FALSE );
+    playlist_item_t    *p_current = playlist_ItemGetByInput( p_playlist,
+                                                             p_current_input,
+                                                             VLC_FALSE );
     char               *psz_name = strdup (p_access->psz_path);
 
     if( psz_name == NULL )
@@ -221,13 +222,15 @@ static int Read( access_t *p_access, uint8_t *p_buffer, int i_len)
     msg_Dbg( p_access, "opening directory `%s'", p_access->psz_path );
 
     p_current->p_input->i_type = ITEM_TYPE_DIRECTORY;
-    p_item_in_category = playlist_ItemToNode( p_playlist, p_current, VLC_FALSE );
+    p_item_in_category = playlist_ItemToNode( p_playlist, p_current,
+                                              VLC_FALSE );
 
     i_activity = var_GetInteger( p_playlist, "activity" );
     var_SetInteger( p_playlist, "activity", i_activity +
                     DIRECTORY_ACTIVITY );
 
-    ReadDir( p_playlist, psz_name, i_mode, p_current, p_item_in_category );
+    ReadDir( p_playlist, psz_name, i_mode, p_current, p_item_in_category,
+             p_current_input );
 
     i_activity = var_GetInteger( p_playlist, "activity" );
     var_SetInteger( p_playlist, "activity", i_activity -
@@ -329,7 +332,8 @@ static int Sort (const char **a, const char **b)
  *****************************************************************************/
 static int ReadDir( playlist_t *p_playlist, const char *psz_name,
                     int i_mode, playlist_item_t *p_parent,
-                    playlist_item_t *p_parent_category )
+                    playlist_item_t *p_parent_category,
+                    input_item_t *p_current_input )
 {
     char **pp_dir_content = NULL;
     int             i_dir_content, i, i_return = VLC_SUCCESS;
@@ -434,7 +438,8 @@ static int ReadDir( playlist_t *p_playlist, const char *psz_name,
                     /* If we had the parent in category, the it is now node.
                      * Else, we still don't have  */
                     if( ReadDir( p_playlist, psz_uri , MODE_EXPAND,
-                                 p_node, p_parent_category ? p_node : NULL )
+                                 p_node, p_parent_category ? p_node : NULL,
+                                 p_current_input )
                           != VLC_SUCCESS )
                     {
                         i_return = VLC_EGENERIC;
@@ -469,10 +474,14 @@ static int ReadDir( playlist_t *p_playlist, const char *psz_name,
                                                  psz_uri, entry, 0, NULL,
                                                  -1, ITEM_TYPE_VFILE );
                 if (p_input != NULL)
+                {
+                    if( p_current_input )
+                        input_ItemCopyOptions( p_current_input, p_input );
                     playlist_BothAddInput( p_playlist, p_input,
                                            p_parent_category,
                                            PLAYLIST_APPEND|PLAYLIST_PREPARSE,
                                            PLAYLIST_END, NULL, NULL );
+                }
             }
         }
     }
-- 
GitLab