From: Ilkka Ollakka Date: Wed, 17 Dec 2008 21:07:22 +0000 (+0200) Subject: Don't wait location-node for creating input, and allow multiple X-Git-Tag: 1.0.0-pre1~1734 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=c44336c87273fc2c55f018a8e2cd5847136a90b6;p=vlc 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 --- diff --git a/modules/demux/playlist/xspf.c b/modules/demux/playlist/xspf.c index ea51cf93d0..04f264e17a 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 ) @@ -572,8 +573,7 @@ static bool parse_track_node COMPLEX_INTERFACE free( psz_uri ); psz_uri = psz_tmp; } - p_new_input = input_item_NewExt( p_demux, psz_uri, - NULL, 0, NULL, -1 ); + input_item_SetURI( p_new_input, psz_uri ); free( psz_uri ); input_item_CopyOptions( p_input_item, p_new_input ); psz_uri = NULL;