]> git.sesse.net Git - vlc/blobdiff - modules/gui/skins2/parser/xmlparser.cpp
skins2: don't load XML catalog if DTD not requested
[vlc] / modules / gui / skins2 / parser / xmlparser.cpp
index dd7279b9b00017680c11ad84d3c6dc9d80a7b919..ca287da27f95484e2f8d27f3ba838bcbfa26dd0f 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>
@@ -38,23 +39,24 @@ XMLParser::XMLParser( intf_thread_t *pIntf, const string &rFileName,
     m_pReader = NULL;
     m_pStream = NULL;
 
-    m_pXML = xml_Create( pIntf );
-    if( !m_pXML )
+    if( useDTD )
     {
-        msg_Err( getIntf(), "failed to open XML parser" );
-        return;
+        m_pXML = xml_Create( pIntf );
+        if( m_pXML )
+            LoadCatalog();
+        else
+        {
+            msg_Err( getIntf(), "DTD not supported" );
+            useDTD = false;
+        }
     }
+    else
+        m_pXML = NULL;
 
-    // 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",
@@ -75,7 +77,7 @@ XMLParser::XMLParser( intf_thread_t *pIntf, const string &rFileName,
 
 XMLParser::~XMLParser()
 {
-    if( m_pReader && m_pXML ) xml_ReaderDelete( m_pXML, m_pReader );
+    if( m_pReader ) xml_ReaderDelete( m_pReader );
     if( m_pXML ) xml_Delete( m_pXML );
     if( m_pStream ) stream_Delete( m_pStream );
 }