~singpolyma/biboumi

4e32fe213cccdc6cdc1dcba498fd74b8b97703ea — Florent Le Coz 7 years ago 450de4c
Refactor XmppParser::end_element to make it clearer

Both for me, and apparently for clang static analyzer, who reported a (imo)
false positive.
1 files changed, 12 insertions(+), 8 deletions(-)

M louloulibs/xmpp/xmpp_parser.cpp
M louloulibs/xmpp/xmpp_parser.cpp => louloulibs/xmpp/xmpp_parser.cpp +12 -8
@@ 104,20 104,24 @@ void XmppParser::start_element(const XML_Char* name, const XML_Char** attribute)
void XmppParser::end_element(const XML_Char*)
{
  this->level--;
  if (this->level == 1)
    {
      this->stanza_event(*this->current_node);
    }
  if (this->level == 0)
    {
    { // End of the whole stream
      this->stream_close_event(*this->current_node);
      this->current_node = nullptr;
      this->root.reset();
    }
  else
    this->current_node = this->current_node->get_parent();
  if (this->level == 1)
    this->current_node->delete_all_children();
    {
      auto parent = this->current_node->get_parent();
      if (this->level == 1)
        { // End of a stanza
          this->stanza_event(*this->current_node);
          // Note: deleting all the children of our parent deletes ourself,
          // so current_node is an invalid pointer after this line
          this->current_node->get_parent()->delete_all_children();
        }
      this->current_node = parent;
    }
}

void XmppParser::char_data(const XML_Char* data, int len)