]> git.sesse.net Git - vlc/blobdiff - modules/access/directory.c
Avoid runtime warning: directory.c does not give any meta information
[vlc] / modules / access / directory.c
index 1cde31422b754126ca5b4419f24208c8c169e542..b5a38af7aa4decb10a714ff7af0959b2d6fbb73d 100644 (file)
@@ -30,6 +30,7 @@
 # include "config.h"
 #endif
 
+#include <assert.h>
 #include <vlc_common.h>
 #include <vlc_plugin.h>
 #warning playlist code must not be used here.
@@ -135,8 +136,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 *, 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);
@@ -188,6 +189,7 @@ static void Close( vlc_object_t * p_this )
  *****************************************************************************/
 static ssize_t ReadNull( access_t *p_access, uint8_t *p_buffer, size_t i_len)
 {
+    (void)p_access;
     /* Return fake data */
     memset( p_buffer, 0, i_len );
     return i_len;
@@ -198,9 +200,10 @@ 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)
 {
+    (void)p_buffer;    (void)i_len;
     char               *psz;
     int                 i_mode;
-    char               *psz_name = strdup (p_access->psz_path);
+    char               *psz_name = strdup( p_access->psz_path );
 
     if( psz_name == NULL )
         return VLC_ENOMEM;
@@ -215,18 +218,20 @@ static ssize_t Read( access_t *p_access, uint8_t *p_buffer, size_t i_len)
     if( !p_input )
     {
         msg_Err( p_access, "unable to find input (internal error)" );
-        vlc_object_release( p_playlist );
+        free( psz_name );
+        pl_Release( p_access );
         return VLC_ENOOBJ;
     }
 
     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 )
     {
         msg_Err( p_access, "unable to find item in playlist" );
         vlc_object_release( p_input );
-        vlc_object_release( p_playlist );
+        free( psz_name );
+        pl_Release( p_access );
         return VLC_ENOOBJ;
     }
 
@@ -254,16 +259,18 @@ 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 );
+    assert( p_item_in_category );
 
-    ReadDir( p_playlist, psz_name, i_mode, 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 );
 
     playlist_Signal( p_playlist );
 
     free( psz_name );
     vlc_object_release( p_input );
-    vlc_object_release( p_playlist );
+    pl_Release( p_access );
 
     /* Return fake data forever */
     p_access->pf_read = ReadNull;
@@ -308,6 +315,7 @@ static int Control( access_t *p_access, int i_query, va_list args )
         case ACCESS_SET_SEEKPOINT:
         case ACCESS_SET_PRIVATE_ID_STATE:
         case ACCESS_GET_CONTENT_TYPE:
+        case ACCESS_GET_META:
             return VLC_EGENERIC;
 
         default:
@@ -337,6 +345,7 @@ static int DemuxOpen ( vlc_object_t *p_this )
  *****************************************************************************/
 static int Demux( demux_t *p_demux )
 {
+    (void)p_demux;
     return 0;
 }
 
@@ -364,7 +373,8 @@ 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,
+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,
@@ -374,6 +384,9 @@ 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;
 
@@ -488,10 +501,10 @@ static int ReadDir( playlist_t *p_playlist, const char *psz_name,
                                               p_parent_category,
                                               PLAYLIST_NO_REBUILD, NULL );
                 PL_UNLOCK;
-
+                assert( p_node );
                 /* 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,
+                i_return = ReadDir( p_access, p_playlist, psz_uri , MODE_EXPAND,
                                     p_parent_category ? p_node : NULL,
                                     p_current_input, subdir, &stself );
                 closedir (subdir);
@@ -523,19 +536,20 @@ 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( p_playlist,
+                p_input = input_item_NewWithType( VLC_OBJECT( p_playlist ),
                                                  psz_uri, entry, 0, NULL,
                                                  -1, ITEM_TYPE_FILE );
                 if (p_input != NULL)
                 {
                     if( p_current_input )
-                        input_ItemCopyOptions( p_current_input, p_input );
+                        input_item_CopyOptions( p_current_input, p_input );
+                    assert( p_parent_category );
                     int i_ret = playlist_BothAddInput( p_playlist, p_input,
                                            p_parent_category,
                                            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;