[vlc-devel] commit: Don't wait location-node for creating input, and allow multiple ( Ilkka Ollakka )

git version control git at videolan.org
Sun Jan 11 17:34:40 CET 2009


vlc | branch: 0.9-bugfix | Ilkka Ollakka <ileoo at videolan.org> | Wed Dec 17 23:07:22 2008 +0200| [343c86e8d2522b5c3b482fee76ea16be7c34b3ed] | committer: Ilkka Ollakka 

Don't wait location-node for creating input, and allow multiple
location nodes on track.

Use last location-node for uri (maybe first would be better instead ?).

check that input_item_NewExt doesn't return NULL

should fix ticket #2353

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

 modules/demux/playlist/xspf.c |   29 ++++++++++++++++++-----------
 1 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/modules/demux/playlist/xspf.c b/modules/demux/playlist/xspf.c
index 852ce1a..3516295 100644
--- a/modules/demux/playlist/xspf.c
+++ b/modules/demux/playlist/xspf.c
@@ -394,7 +394,6 @@ static bool parse_tracklist_node COMPLEX_INTERFACE
  */
 static bool parse_track_node COMPLEX_INTERFACE
 {
-    input_item_t *p_new_input = NULL;
     int i_node;
     char *psz_name = NULL;
     char *psz_value = NULL;
@@ -417,6 +416,14 @@ static bool parse_track_node COMPLEX_INTERFACE
           {NULL,           UNKNOWN_CONTENT, {NULL} }
         };
 
+    input_item_t *p_new_input = input_item_NewExt( p_demux, NULL, NULL, 0, NULL, -1 );
+
+    if( !p_new_input )
+    {
+        /* malloc has failed for input_item_NewExt, so bailout early */
+        return false;
+    }
+
     /* reset i_track_id */
     p_demux->p_sys->i_track_id = -1;
 
@@ -503,11 +510,13 @@ static bool parse_track_node COMPLEX_INTERFACE
 
                     if( p_demux->p_sys->i_track_id < 0 )
                     {
-                        if( p_new_input )
+                        char *psz_uri = input_item_GetURI( p_new_input );
+                        if( psz_uri && *psz_uri)
                         {
                             input_item_AddSubItem( p_input_item, p_new_input );
-                            vlc_gc_decref( p_new_input );
                         }
+                        vlc_gc_decref( p_new_input );
+                        free( psz_uri );
                         return true;
                     }
 
@@ -543,14 +552,6 @@ static bool parse_track_node COMPLEX_INTERFACE
                 if( !strcmp( p_handler->name, "location" ) )
                 {
                     char *psz_uri = NULL;
-                    /* there MUST NOT be an item */
-                    if( p_new_input )
-                    {
-                        msg_Err( p_demux, "item <%s> already created",
-                                 psz_name );
-                        FREE_ATT();
-                        return false;
-                    }
                     psz_uri = decode_URI_duplicate( psz_value );
 
                     if( psz_uri )
@@ -581,6 +582,12 @@ static bool parse_track_node COMPLEX_INTERFACE
                         FREE_ATT();
                         return false;
                     }
+                    input_item_SetURI( p_new_input, psz_uri );
+                    free( psz_uri );
+                    input_item_CopyOptions( p_input_item, p_new_input );
+                    psz_uri = NULL;
+                    FREE_ATT();
+                    p_handler = NULL;
                 }
                 else
                 {




More information about the vlc-devel mailing list