[vlc-devel] commit: playlist_MLLoad: format library URI correctly ( Rémi Denis-Courmont )

git version control git at videolan.org
Tue Jun 23 21:13:04 CEST 2009


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Tue Jun 23 22:13:24 2009 +0300| [c4dcc7a5a6763e08f641227270ca040192e44af0] | committer: Rémi Denis-Courmont 

playlist_MLLoad: format library URI correctly

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c4dcc7a5a6763e08f641227270ca040192e44af0
---

 src/playlist/loadsave.c |   47 +++++++++++++++++++++++------------------------
 1 files changed, 23 insertions(+), 24 deletions(-)

diff --git a/src/playlist/loadsave.c b/src/playlist/loadsave.c
index 5de646a..80abaad 100644
--- a/src/playlist/loadsave.c
+++ b/src/playlist/loadsave.c
@@ -130,34 +130,39 @@ int playlist_MLLoad( playlist_t *p_playlist )
         return VLC_EGENERIC;
     }
 
-    if( asprintf( &psz_uri, "%s" DIR_SEP "ml.xspf", psz_datadir ) == -1 )
-    {
-        psz_uri = NULL;
-        goto error;
+    if( asprintf( &psz_uri, "%s" DIR_SEP "ml.xspf", psz_datadir ) != -1 )
+    {   /* loosy check for media library file */
+        struct stat st;
+        int ret = utf8_stat( psz_uri , &st );
+        free( psz_uri );
+        if( ret )
+        {
+            free( psz_datadir );
+            return VLC_EGENERIC;
+        }
     }
-    struct stat p_stat;
-    /* checks if media library file is present */
-    if( utf8_stat( psz_uri , &p_stat ) )
-        goto error;
-    free( psz_uri );
 
-    /* FIXME: WTF? stat() should never be used right before open()! */
-    if( asprintf( &psz_uri, "file/xspf-open://%s" DIR_SEP "ml.xspf",
-                  psz_datadir ) == -1 )
-    {
+    psz_uri = make_URI( psz_datadir );
+    free( psz_datadir );
+    psz_datadir = psz_uri;
+    if( psz_datadir == NULL )
+        return VLC_EGENERIC;
+
+    if( asprintf( &psz_uri, "%s/ml.xspf", psz_datadir ) == -1 )
         psz_uri = NULL;
-        goto error;
-    }
     free( psz_datadir );
     psz_datadir = NULL;
+    if( psz_uri == NULL )
+        return VLC_ENOMEM;
 
-    const char *const psz_option = "meta-file";
+    const char *const options[] = { "meta-file", "demux=xspf-open" };
     /* that option has to be cleaned in input_item_subitem_added() */
     /* vlc_gc_decref() in the same function */
     p_input = input_item_NewExt( p_playlist, psz_uri, _("Media Library"),
-                                 1, &psz_option, VLC_INPUT_OPTION_TRUSTED, -1 );
+                                 2, options, VLC_INPUT_OPTION_TRUSTED, -1 );
+    free( psz_uri );
     if( p_input == NULL )
-        goto error;
+        return VLC_EGENERIC;
 
     PL_LOCK;
     if( p_playlist->p_ml_onelevel->p_input )
@@ -189,13 +194,7 @@ int playlist_MLLoad( playlist_t *p_playlist )
                         input_item_subitem_added, p_playlist );
 
     vlc_gc_decref( p_input );
-    free( psz_uri );
     return VLC_SUCCESS;
-
-error:
-    free( psz_uri );
-    free( psz_datadir );
-    return VLC_ENOMEM;
 }
 
 int playlist_MLDump( playlist_t *p_playlist )




More information about the vlc-devel mailing list