]> git.sesse.net Git - vlc/blobdiff - modules/gui/skins2/parser/xmlparser.cpp
make_URI: add scheme parameter
[vlc] / modules / gui / skins2 / parser / xmlparser.cpp
index 2e66d04ce92edee6fb27ab0d85bddf1688feb5fc..e2f1e8bc361c5b881bd44ef4cff7af27031df6c9 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "xmlparser.hpp"
 #include "../src/os_factory.hpp"
+#include <vlc_url.h>
 
 #ifdef HAVE_SYS_STAT_H
 #   include <sys/stat.h>
@@ -45,14 +46,19 @@ XMLParser::XMLParser( intf_thread_t *pIntf, const string &rFileName,
         return;
     }
 
-    // Avoid duplicate initialization (mutex needed ?)
-    if( !m_initialized )
-    {
-        LoadCatalog();
-        m_initialized = true;
-    }
+    // Avoid duplicate initialization (mutex needed ?) -> doesn't work
+    // Reinitialization required for a new XMLParser
+    // if( !m_initialized )
+    // {
+    //    LoadCatalog();
+    //    m_initialized = true;
+    // }
+    LoadCatalog();
+
+    char* psz_uri = make_URI( rFileName.c_str(), NULL );
+    m_pStream = stream_UrlNew( pIntf, psz_uri );
+    free( psz_uri );
 
-    m_pStream = stream_UrlNew( pIntf, rFileName.c_str() );
     if( !m_pStream )
     {
         msg_Err( getIntf(), "failed to open %s for reading",
@@ -67,8 +73,7 @@ XMLParser::XMLParser( intf_thread_t *pIntf, const string &rFileName,
         return;
     }
 
-    xml_ReaderUseDTD( m_pReader, useDTD ? true : false );
-
+    xml_ReaderUseDTD( m_pReader, useDTD );
 }
 
 
@@ -163,7 +168,12 @@ bool XMLParser::parse()
                 {
                     char *name = xml_ReaderName( m_pReader );
                     char *value = xml_ReaderValue( m_pReader );
-                    if( !name || !value ) return false;
+                    if( !name || !value )
+                    {
+                        free( name );
+                        free( value );
+                        return false;
+                    }
                     attributes[name] = value;
                 }