*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#include "xmlparser.hpp"
#include "../src/os_factory.hpp"
+#include <vlc_url.h>
#ifdef HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif
-// Static variable to avoid initializing catalogs twice
-static bool m_initialized = false;
-
XMLParser::XMLParser( intf_thread_t *pIntf, const string &rFileName,
bool useDTD ):
SkinObject( pIntf )
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 ?)
- if( !m_initialized )
- {
- LoadCatalog();
- m_initialized = true;
- }
+ 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",
+ msg_Err( getIntf(), "failed to open %s for reading",
rFileName.c_str() );
return;
}
m_pReader = xml_ReaderCreate( m_pXML, m_pStream );
if( !m_pReader )
{
- msg_Err( getIntf(), "Failed to open %s for parsing",
+ msg_Err( getIntf(), "failed to open %s for parsing",
rFileName.c_str() );
return;
}
- xml_ReaderUseDTD( m_pReader, useDTD ? VLC_TRUE : VLC_FALSE );
-
+ xml_ReaderUseDTD( m_pReader, useDTD );
}
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 );
}
if( !stat( path.c_str(), &statBuf ) )
{
// DTD found
- msg_Dbg( getIntf(), "Using DTD %s", path.c_str() );
+ msg_Dbg( getIntf(), "using DTD %s", path.c_str() );
// Add an entry in the default catalog
xml_CatalogAdd( m_pXML, "public",
}
if( it == resPath.end() )
{
- msg_Err( getIntf(), "Cannot find the skins DTD !");
+ msg_Err( getIntf(), "cannot find the skins DTD");
}
#endif
}
{
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;
}