[vlc-devel] [PATCH 3/3] input: item: ignore directories if --recursive=none

Filip Roséen filip at atch.se
Fri Jul 20 10:15:44 CEST 2018


fixes: #20865
---
 include/vlc_input_item.h |  1 +
 src/input/item.c         | 12 ++++++++++--
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/include/vlc_input_item.h b/include/vlc_input_item.h
index 4bd07c1733..a78ae13c89 100644
--- a/include/vlc_input_item.h
+++ b/include/vlc_input_item.h
@@ -440,6 +440,7 @@ struct vlc_readdir_helper
     bool b_show_hiddenfiles;
     bool b_flatten;
     char *psz_ignored_exts;
+    bool b_show_directories;
 };
 
 /**
diff --git a/src/input/item.c b/src/input/item.c
index f288d23c7d..8cc65722b8 100644
--- a/src/input/item.c
+++ b/src/input/item.c
@@ -1406,11 +1406,12 @@ static bool rdh_file_has_ext(const char *psz_filename,
 }
 
 static bool rdh_file_is_ignored(struct vlc_readdir_helper *p_rdh,
-                                const char *psz_filename)
+                                const char *psz_filename, int i_type)
 {
     return (psz_filename[0] == '\0'
          || strcmp(psz_filename, ".") == 0
          || strcmp(psz_filename, "..") == 0
+         || (!p_rdh->b_show_directories && i_type == ITEM_TYPE_DIRECTORY)
          || (!p_rdh->b_show_hiddenfiles && psz_filename[0] == '.')
          || rdh_file_has_ext(psz_filename, p_rdh->psz_ignored_exts));
 }
@@ -1706,7 +1707,14 @@ void vlc_readdir_helper_init(struct vlc_readdir_helper *p_rdh,
         p_obj = p_var_obj;
     }
 
+    char* psz_recursive = var_InheritString(p_obj, "recursive");
+    bool b_show_directories = true;
+    if (psz_recursive && !strcmp( psz_recursive, "none"))
+        b_show_directories = false;
+    free(psz_recursive);
+
     p_rdh->p_node = p_node;
+    p_rdh->b_show_directories = b_show_directories;
     p_rdh->b_show_hiddenfiles = var_InheritBool(p_obj, "show-hiddenfiles");
     p_rdh->psz_ignored_exts = var_InheritString(p_obj, "ignore-filetypes");
     bool b_autodetect = var_InheritBool(p_obj, "sub-autodetect-file");
@@ -1794,7 +1802,7 @@ int vlc_readdir_helper_additem(struct vlc_readdir_helper *p_rdh,
         TAB_APPEND(p_rdh->i_slaves, p_rdh->pp_slaves, p_rdh_slave);
     }
 
-    if (rdh_file_is_ignored(p_rdh, psz_filename))
+    if (rdh_file_is_ignored(p_rdh, psz_filename, i_type))
         return VLC_SUCCESS;
 
     input_item_node_t *p_node = p_rdh->p_node;
-- 
2.18.0


More information about the vlc-devel mailing list