diff options
Diffstat (limited to 'lib/xmltree.c')
-rw-r--r-- | lib/xmltree.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/lib/xmltree.c b/lib/xmltree.c index 3906029c..0726d387 100644 --- a/lib/xmltree.c +++ b/lib/xmltree.c @@ -3,7 +3,7 @@ * BitlBee - An IRC to IM gateway * * Simple XML (stream) parse tree handling code (Jabber/XMPP, mainly) * * * -* Copyright 2006 Wilmer van der Gaast <wilmer@gaast.net> * +* Copyright 2006-2012 Wilmer van der Gaast <wilmer@gaast.net> * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * @@ -162,9 +162,8 @@ int xt_handle( struct xt_parser *xt, struct xt_node *node, int depth ) xt_status st; int i; - /* Just in case someone likes infinite loops... */ if( xt->root == NULL ) - return 0; + return 1; if( node == NULL ) return xt_handle( xt, xt->root, depth ); @@ -262,15 +261,21 @@ void xt_cleanup( struct xt_parser *xt, struct xt_node *node, int depth ) } } -struct xt_node *xt_from_string( const char *in ) +struct xt_node *xt_from_string( const char *in, int len ) { struct xt_parser *parser; - struct xt_node *ret; + struct xt_node *ret = NULL; + + if( len == 0 ) + len = strlen( in ); parser = xt_new( NULL, NULL ); - xt_feed( parser, in, strlen( in ) ); - ret = parser->root; - parser->root = NULL; + xt_feed( parser, in, len ); + if( parser->cur == NULL ) + { + ret = parser->root; + parser->root = NULL; + } xt_free( parser ); return ret; |