From 38545af533830197dd3c9ec2a86d432b98aa9d7a Mon Sep 17 00:00:00 2001 From: Dmitry Podgorny Date: Mon, 21 Dec 2015 13:46:51 +0200 Subject: [PATCH] parser/expat: reduce code duplication --- src/parser_expat.c | 54 +++++++++++++++++----------------------------- 1 file changed, 20 insertions(+), 34 deletions(-) diff --git a/src/parser_expat.c b/src/parser_expat.c index 17e680a..3e1f963 100644 --- a/src/parser_expat.c +++ b/src/parser_expat.c @@ -109,41 +109,27 @@ static void _start_element(void *userdata, parser->startcb((char *)name, (char **)attrs, parser->userdata); } else { - /* build stanzas at depth 1 */ - if (!parser->stanza && parser->depth != 1) { - /* something terrible happened */ - /* FIXME: shutdown disconnect */ - xmpp_error(parser->ctx, "parser", "oops, where did our stanza go?"); - } else if (!parser->stanza) { - /* starting a new toplevel stanza */ - parser->stanza = xmpp_stanza_new(parser->ctx); - if (!parser->stanza) { - /* FIXME: can't allocate, disconnect */ - } - xmpp_stanza_set_name(parser->stanza, name); - _set_attributes(parser->stanza, attrs); - if (ns) - xmpp_stanza_set_ns(parser->stanza, ns); - } else { - /* starting a child of parser->stanza */ - child = xmpp_stanza_new(parser->ctx); - if (!child) { - /* FIXME: can't allocate, disconnect */ - } - xmpp_stanza_set_name(child, name); - _set_attributes(child, attrs); - if (ns) - xmpp_stanza_set_ns(child, ns); + /* build stanzas at depth 1 */ + if (!parser->stanza && parser->depth != 1) { + /* something terrible happened */ + /* FIXME: shutdown disconnect */ + xmpp_error(parser->ctx, "parser", "oops, where did our stanza go?"); + } else { + child = xmpp_stanza_new(parser->ctx); + if (!child) { + /* FIXME: can't allocate, disconnect */ + } + xmpp_stanza_set_name(child, name); + _set_attributes(child, attrs); + if (ns) + xmpp_stanza_set_ns(child, ns); - /* add child to parent */ - xmpp_stanza_add_child(parser->stanza, child); - - /* the child is owned by the toplevel stanza now */ - xmpp_stanza_release(child); - - /* make child the current stanza */ - parser->stanza = child; - } + if (parser->stanza != NULL) { + xmpp_stanza_add_child(parser->stanza, child); + xmpp_stanza_release(child); + } + parser->stanza = child; + } } if (ns) xmpp_free(parser->ctx, ns);