#include <ctype.h>
#include <stdarg.h>
-#include <assert.h>
-
#undef XTAG_DEBUG
typedef struct _XList
/*****************************************************************************
* Module descriptor
*****************************************************************************/
-static int Open ( vlc_object_t * );
-static void Close( vlc_object_t * );
+static int ReaderOpen( vlc_object_t * );
+static void ReaderClose( vlc_object_t * );
vlc_module_begin ()
set_description( N_("Simple XML Parser") )
- set_capability( "xml", 5 )
- set_callbacks( Open, Close )
+ set_capability( "xml reader", 5 )
+ set_callbacks( ReaderOpen, ReaderClose )
vlc_module_end ()
struct xml_reader_sys_t
bool b_endtag;
};
-static xml_reader_t *ReaderCreate( xml_t *, stream_t * );
-static void ReaderDelete( xml_reader_t * );
static int ReaderRead( xml_reader_t * );
static int ReaderNodeType( xml_reader_t * );
static char *ReaderName( xml_reader_t * );
static int ReaderUseDTD ( xml_reader_t *, bool );
-static void CatalogLoad( xml_t *, const char * );
-static void CatalogAdd( xml_t *, const char *, const char *, const char * );
-
static XTag *xtag_new_parse( const char *, int );
static char *xtag_get_name( XTag * );
#if 0
static int xtag_snprint( char *, int, XTag * );
#endif
-/*****************************************************************************
- * Module initialization
- *****************************************************************************/
-static int Open( vlc_object_t *p_this )
-{
- xml_t *p_xml = (xml_t *)p_this;
-
- p_xml->pf_reader_create = ReaderCreate;
- p_xml->pf_reader_delete = ReaderDelete;
-
- p_xml->pf_catalog_load = CatalogLoad;
- p_xml->pf_catalog_add = CatalogAdd;
-
- return VLC_SUCCESS;
-}
-
-/*****************************************************************************
- * Module deinitialization
- *****************************************************************************/
-static void Close( vlc_object_t *p_this )
-{
- VLC_UNUSED(p_this);
- return;
-}
-
-/*****************************************************************************
- * Catalogue functions
- *****************************************************************************/
-static void CatalogLoad( xml_t *p_xml, const char *psz_filename )
-{
- VLC_UNUSED(psz_filename);
- msg_Dbg( p_xml, "catalog support not implemented" );
-}
-
-static void CatalogAdd( xml_t *p_xml, const char *psz_arg1,
- const char *psz_arg2, const char *psz_filename )
-{
- VLC_UNUSED(p_xml); VLC_UNUSED(psz_arg1); VLC_UNUSED(psz_arg2);
- VLC_UNUSED(psz_filename);
-}
-
/*****************************************************************************
* Reader functions
*****************************************************************************/
-static xml_reader_t *ReaderCreate( xml_t *p_xml, stream_t *s )
+static int ReaderOpen( vlc_object_t *p_this )
{
- xml_reader_t *p_reader;
+ xml_reader_t *p_reader = (xml_reader_t *)p_this;
+ stream_t *s = p_reader->p_stream;
char *p_buffer;
int i_size, i_pos = 0, i_buffer = 2048;
XTag *p_root;
/* Open and read file */
p_buffer = malloc( i_buffer );
if( p_buffer == NULL )
- return NULL;
+ return VLC_ENOMEM;
while( ( i_size = stream_Read( s, &p_buffer[i_pos], 2048 ) ) == 2048 )
{
i_buffer += i_size;
p_buffer = realloc_or_free( p_buffer, i_buffer );
if( !p_buffer )
- return NULL;
+ return VLC_ENOMEM;
}
if( i_pos + i_size == 0 )
{
- msg_Dbg( p_xml, "empty XML" );
+ msg_Dbg( p_this, "empty XML" );
free( p_buffer );
- return NULL;
+ return VLC_ENOMEM;
}
p_buffer[ i_pos + i_size ] = '\0'; /* 0 terminated string */
p_root = xtag_new_parse( p_buffer, i_buffer );
+ free( p_buffer );
if( !p_root )
{
- msg_Warn( p_xml, "couldn't parse XML" );
- free( p_buffer );
- return NULL;
+ msg_Warn( p_this, "couldn't parse XML" );
+ return VLC_ENOMEM;
}
- free( p_buffer );
- p_reader = malloc( sizeof(xml_reader_t) );
- if( !p_reader )
- return NULL;
p_reader->p_sys = malloc( sizeof(xml_reader_sys_t) );
if( !p_reader->p_sys )
{
- free( p_reader );
- return NULL;
+ xtag_free( p_root );
+ return VLC_ENOMEM;
}
p_reader->p_sys->p_root = p_root;
p_reader->p_sys->p_curtag = NULL;
p_reader->p_sys->p_curattr = NULL;
p_reader->p_sys->b_endtag = false;
- p_reader->p_xml = p_xml;
p_reader->pf_read = ReaderRead;
p_reader->pf_node_type = ReaderNodeType;
p_reader->pf_next_attr = ReaderNextAttr;
p_reader->pf_use_dtd = ReaderUseDTD;
- return p_reader;
+ return VLC_SUCCESS;
}
-static void ReaderDelete( xml_reader_t *p_reader )
+static void ReaderClose( vlc_object_t *p_this )
{
+ xml_reader_t *p_reader = (xml_reader_t *)p_this;
+
xtag_free( p_reader->p_sys->p_root );
free( p_reader->p_sys );
- free( p_reader );
}
static int ReaderUseDTD ( xml_reader_t *p_reader, bool b_use )
{
XList *l, *last;
- l = (XList *)malloc( sizeof(XList) );
- assert( l );
+ l = (XList *)xmalloc( sizeof(XList) );
l->prev = l->next = NULL;
l->data = data;
if( xi > 0 && xtag_cin (s[xi], good_end) )
{
- ret = malloc( xi+1 );
- assert( ret );
+ ret = xmalloc( xi+1 );
strncpy( ret, s, xi );
ret[xi] = '\0';
parser->start = &s[xi];
}
}
- ret = malloc( xi+1 );
- assert( ret );
+ ret = xmalloc( xi+1 );
strncpy( ret, s, xi );
ret[xi] = '\0';
parser->start = &s[xi];
goto err_free_name;
}
- attr = malloc( sizeof (*attr) );
- assert( attr );
+ attr = xmalloc( sizeof (*attr) );
attr->name = name;
attr->value = value;
return attr;
if( (pcdata = xtag_slurp_to( parser, X_OPENTAG, X_NONE )) != NULL )
{
- tag = malloc( sizeof(*tag) );
- assert( tag );
+ tag = xmalloc( sizeof(*tag) );
tag->name = NULL;
tag->pcdata = pcdata;
tag->parent = parser->current_tag;
fprintf (stderr, "<%s ...\n", name);
#endif
- tag = malloc( sizeof(*tag) );
- assert( tag );
+ tag = xmalloc( sizeof(*tag) );
tag->name = name;
tag->pcdata = NULL;
tag->parent = parser->current_tag;
return tag;
}
- wrapper = malloc( sizeof(XTag) );
- assert( wrapper );
+ wrapper = xmalloc( sizeof(XTag) );
wrapper->name = NULL;
wrapper->pcdata = NULL;
wrapper->parent = NULL;