X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faccess%2Fdirectory.c;h=124bba878064ef184e30b747d69283b2c8882a78;hb=494ace96d068ee8e4b6b689da0ae469c0c0e4fe3;hp=d770321eaed51c77e18a0f5a2a5b08af09957f30;hpb=43f58febd846de699ea5dfee21f4b1f03b2adc0d;p=vlc diff --git a/modules/access/directory.c b/modules/access/directory.c index d770321eae..124bba8780 100644 --- a/modules/access/directory.c +++ b/modules/access/directory.c @@ -30,8 +30,9 @@ # include "config.h" #endif -#include +#include #include +#warning playlist code must not be used here. #include #include #include @@ -79,9 +80,9 @@ static int DemuxOpen ( vlc_object_t * ); "collapse: subdirectories appear but are expanded on first play.\n" \ "expand: all subdirectories are expanded.\n" ) -static const char *psz_recursive_list[] = { "none", "collapse", "expand" }; -static const char *psz_recursive_list_text[] = { N_("none"), N_("collapse"), - N_("expand") }; +static const char *const psz_recursive_list[] = { "none", "collapse", "expand" }; +static const char *const psz_recursive_list_text[] = { + N_("none"), N_("collapse"), N_("expand") }; #define IGNORE_TEXT N_("Ignored extensions") #define IGNORE_LONGTEXT N_( \ @@ -92,9 +93,9 @@ static const char *psz_recursive_list_text[] = { N_("none"), N_("collapse"), vlc_module_begin(); set_category( CAT_INPUT ); - set_shortname( _("Directory" ) ); + set_shortname( N_("Directory" ) ); set_subcategory( SUBCAT_INPUT_ACCESS ); - set_description( _("Standard filesystem directory input") ); + set_description( N_("Standard filesystem directory input") ); set_capability( "access", 55 ); add_shortcut( "directory" ); add_shortcut( "dir" ); @@ -134,8 +135,8 @@ static int Demux( demux_t *p_demux ); 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 *, input_item_t *, +static int ReadDir( access_t *, playlist_t *, const char *psz_name, + int i_mode, playlist_item_t *, input_item_t *, DIR *handle, stat_list_t *stats ); static DIR *OpenDir (vlc_object_t *obj, const char *psz_name); @@ -198,7 +199,7 @@ static ssize_t ReadNull( access_t *p_access, uint8_t *p_buffer, size_t i_len) static ssize_t Read( access_t *p_access, uint8_t *p_buffer, size_t i_len) { char *psz; - int i_mode, i_activity; + int i_mode; char *psz_name = strdup (p_access->psz_path); if( psz_name == NULL ) @@ -219,7 +220,7 @@ static ssize_t Read( access_t *p_access, uint8_t *p_buffer, size_t i_len) } p_current_input = input_GetItem( p_input ); - p_current = playlist_ItemGetByInput( p_playlist, p_current_input, false ); + p_current = playlist_ItemGetByInput( p_playlist, p_current_input, pl_Unlocked ); if( !p_current ) { @@ -253,19 +254,12 @@ static ssize_t Read( access_t *p_access, uint8_t *p_buffer, size_t i_len) p_current->p_input->i_type = ITEM_TYPE_DIRECTORY; p_item_in_category = playlist_ItemToNode( p_playlist, p_current, - false ); + pl_Unlocked ); - 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_access, p_playlist, psz_name, i_mode, + p_item_in_category, p_current_input, (DIR *)p_access->p_sys, NULL ); - i_activity = var_GetInteger( p_playlist, "activity" ); - var_SetInteger( p_playlist, "activity", i_activity - - DIRECTORY_ACTIVITY ); - playlist_Signal( p_playlist ); free( psz_name ); @@ -371,8 +365,9 @@ struct stat_list_t /***************************************************************************** * ReadDir: read a directory and add its content to the list *****************************************************************************/ -static int ReadDir( playlist_t *p_playlist, const char *psz_name, - int i_mode, playlist_item_t *p_parent, +static int ReadDir( access_t *p_access, playlist_t *p_playlist, + const char *psz_name, + int i_mode, playlist_item_t *p_parent_category, input_item_t *p_current_input, DIR *handle, stat_list_t *stparent ) @@ -381,6 +376,12 @@ static int ReadDir( playlist_t *p_playlist, const char *psz_name, int i_dir_content, i, i_return = VLC_SUCCESS; playlist_item_t *p_node; + if( !vlc_object_alive( p_access ) ) + return VLC_EGENERIC; + + if( !vlc_object_alive( p_playlist ) ) + return VLC_EGENERIC; + char **ppsz_extensions = NULL; int i_extensions = 0; char *psz_ignore; @@ -487,14 +488,16 @@ static int ReadDir( playlist_t *p_playlist, const char *psz_name, msg_Dbg (p_playlist, "creating subdirectory %s", psz_uri); + PL_LOCK; p_node = playlist_NodeCreate( p_playlist, entry, p_parent_category, PLAYLIST_NO_REBUILD, NULL ); + PL_UNLOCK; /* If we had the parent in category, the it is now node. * Else, we still don't have */ - i_return = ReadDir( p_playlist, psz_uri , MODE_EXPAND, - p_node, p_parent_category ? p_node : NULL, + i_return = ReadDir( p_access, p_playlist, psz_uri , MODE_EXPAND, + p_parent_category ? p_node : NULL, p_current_input, subdir, &stself ); closedir (subdir); if (i_return) @@ -525,7 +528,7 @@ static int ReadDir( playlist_t *p_playlist, const char *psz_name, memmove (psz_uri + 7, psz_uri, sizeof (psz_uri) - 7); memcpy (psz_uri, "file://", 7); - p_input = input_ItemNewWithType( VLC_OBJECT(p_playlist), + p_input = input_ItemNewWithType( p_playlist, psz_uri, entry, 0, NULL, -1, ITEM_TYPE_FILE ); if (p_input != NULL) @@ -537,7 +540,7 @@ static int ReadDir( playlist_t *p_playlist, const char *psz_name, PLAYLIST_APPEND|PLAYLIST_PREPARSE| PLAYLIST_NO_REBUILD, PLAYLIST_END, NULL, NULL, - false ); + pl_Unlocked ); vlc_gc_decref( p_input ); if( i_ret != VLC_SUCCESS ) return VLC_EGENERIC;