summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFlorent Le Coz <louiz@louiz.org>2015-09-01 14:47:57 +0200
committerFlorent Le Coz <louiz@louiz.org>2015-09-01 14:47:57 +0200
commitf3b3d937ae274d0eec4a737d11ba19a7f4ceef03 (patch)
treec8dbd17073d8247c1d292050c1fff2f12c2114b1 /src
parent38564d77c7679dd4de4562d321146322b6211d61 (diff)
downloadbiboumi-f3b3d937ae274d0eec4a737d11ba19a7f4ceef03.tar.gz
biboumi-f3b3d937ae274d0eec4a737d11ba19a7f4ceef03.tar.bz2
biboumi-f3b3d937ae274d0eec4a737d11ba19a7f4ceef03.tar.xz
biboumi-f3b3d937ae274d0eec4a737d11ba19a7f4ceef03.zip
Use unique_ptr to store the XmlNode’s children
Also fix some constness things
Diffstat (limited to 'src')
-rw-r--r--src/bridge/colors.cpp12
-rw-r--r--src/xmpp/biboumi_adhoc_commands.cpp12
-rw-r--r--src/xmpp/biboumi_component.cpp24
3 files changed, 25 insertions, 23 deletions
diff --git a/src/bridge/colors.cpp b/src/bridge/colors.cpp
index bdc34bf..66f51ee 100644
--- a/src/bridge/colors.cpp
+++ b/src/bridge/colors.cpp
@@ -62,7 +62,9 @@ Xmpp::body irc_format_to_xhtmlim(const std::string& s)
std::unique_ptr<XmlNode> result = std::make_unique<XmlNode>("body");
(*result)["xmlns"] = XHTML_NS;
+ std::unique_ptr<XmlNode> current_node_up;
XmlNode* current_node = result.get();
+
std::string::size_type pos_start = 0;
std::string::size_type pos_end;
@@ -79,8 +81,7 @@ Xmpp::body irc_format_to_xhtmlim(const std::string& s)
styles.strong = !styles.strong;
else if (s[pos_end] == IRC_FORMAT_NEWLINE_CHAR)
{
- XmlNode* br_node = new XmlNode("br");
- current_node->add_child(br_node);
+ current_node->add_child(std::make_unique<XmlNode>("br"));
cleaned += '\n';
}
else if (s[pos_end] == IRC_FORMAT_UNDERLINE_CHAR)
@@ -125,7 +126,7 @@ Xmpp::body irc_format_to_xhtmlim(const std::string& s)
// close opened span, if any
if (current_node != result.get())
{
- result->add_child(current_node);
+ result->add_child(std::move(current_node_up));
current_node = result.get();
}
// Take all currently-applied style and create a new span with it
@@ -144,7 +145,8 @@ Xmpp::body irc_format_to_xhtmlim(const std::string& s)
irc_colors_to_css[styles.bg % IRC_NUM_COLORS] + ";";
if (!styles_str.empty())
{
- current_node = new XmlNode("span");
+ current_node_up = std::make_unique<XmlNode>("span");
+ current_node = current_node_up.get();
(*current_node)["style"] = styles_str;
}
@@ -161,7 +163,7 @@ Xmpp::body irc_format_to_xhtmlim(const std::string& s)
current_node->add_to_inner(txt);
if (current_node != result.get())
- result->add_child(current_node);
+ result->add_child(std::move(current_node_up));
Xmpp::body body_res = std::make_tuple(cleaned, std::move(result));
return body_res;
diff --git a/src/xmpp/biboumi_adhoc_commands.cpp b/src/xmpp/biboumi_adhoc_commands.cpp
index 0dcaf0c..3dbee81 100644
--- a/src/xmpp/biboumi_adhoc_commands.cpp
+++ b/src/xmpp/biboumi_adhoc_commands.cpp
@@ -48,26 +48,26 @@ void DisconnectUserStep2(XmppComponent* xmpp_component, AdhocSession& session, X
// Find out if the jids, and the quit message are provided in the form.
std::string quit_message;
- XmlNode* x = command_node.get_child("x", "jabber:x:data");
+ const XmlNode* x = command_node.get_child("x", "jabber:x:data");
if (x)
{
- XmlNode* message_field = nullptr;
- XmlNode* jids_field = nullptr;
- for (XmlNode* field: x->get_children("field", "jabber:x:data"))
+ const XmlNode* message_field = nullptr;
+ const XmlNode* jids_field = nullptr;
+ for (const XmlNode* field: x->get_children("field", "jabber:x:data"))
if (field->get_tag("var") == "jids")
jids_field = field;
else if (field->get_tag("var") == "quit-message")
message_field = field;
if (message_field)
{
- XmlNode* value = message_field->get_child("value", "jabber:x:data");
+ const XmlNode* value = message_field->get_child("value", "jabber:x:data");
if (value)
quit_message = value->get_inner();
}
if (jids_field)
{
std::size_t num = 0;
- for (XmlNode* value: jids_field->get_children("value", "jabber:x:data"))
+ for (const XmlNode* value: jids_field->get_children("value", "jabber:x:data"))
{
Bridge* bridge = biboumi_component->find_user_bridge(value->get_inner());
if (bridge)
diff --git a/src/xmpp/biboumi_component.cpp b/src/xmpp/biboumi_component.cpp
index f578c30..51775ab 100644
--- a/src/xmpp/biboumi_component.cpp
+++ b/src/xmpp/biboumi_component.cpp
@@ -125,14 +125,14 @@ void BiboumiComponent::handle_presence(const Stanza& stanza)
const std::string own_nick = bridge->get_own_nick(iid);
if (!own_nick.empty() && own_nick != to.resource)
bridge->send_irc_nick_change(iid, to.resource);
- XmlNode* x = stanza.get_child("x", MUC_NS);
- XmlNode* password = x ? x->get_child("password", MUC_NS): nullptr;
+ const XmlNode* x = stanza.get_child("x", MUC_NS);
+ const XmlNode* password = x ? x->get_child("password", MUC_NS): nullptr;
bridge->join_irc_channel(iid, to.resource,
password ? password->get_inner() : "");
}
else if (type == "unavailable")
{
- XmlNode* status = stanza.get_child("status", COMPONENT_NS);
+ const XmlNode* status = stanza.get_child("status", COMPONENT_NS);
bridge->leave_irc_channel(std::move(iid), status ? std::move(status->get_inner()) : "");
}
}
@@ -174,7 +174,7 @@ void BiboumiComponent::handle_message(const Stanza& stanza)
this->send_stanza_error("message", from, to_str, id,
error_type, error_name, "");
});
- XmlNode* body = stanza.get_child("body", COMPONENT_NS);
+ const XmlNode* body = stanza.get_child("body", COMPONENT_NS);
try { // catch IRCNotConnected exceptions
if (type == "groupchat" && iid.is_channel)
@@ -183,7 +183,7 @@ void BiboumiComponent::handle_message(const Stanza& stanza)
{
bridge->send_channel_message(iid, body->get_inner());
}
- XmlNode* subject = stanza.get_child("subject", COMPONENT_NS);
+ const XmlNode* subject = stanza.get_child("subject", COMPONENT_NS);
if (subject)
bridge->set_channel_topic(iid, subject->get_inner());
}
@@ -283,7 +283,7 @@ void BiboumiComponent::handle_iq(const Stanza& stanza)
try {
if (type == "set")
{
- XmlNode* query;
+ const XmlNode* query;
if ((query = stanza.get_child("query", MUC_ADMIN_NS)))
{
const XmlNode* child = query->get_child("item", MUC_ADMIN_NS);
@@ -298,7 +298,7 @@ void BiboumiComponent::handle_iq(const Stanza& stanza)
if (role == "none")
{ // This is a kick
std::string reason;
- XmlNode* reason_el = child->get_child("reason", MUC_ADMIN_NS);
+ const XmlNode* reason_el = child->get_child("reason", MUC_ADMIN_NS);
if (reason_el)
reason = reason_el->get_inner();
bridge->send_irc_kick(iid, nick, reason, id, from);
@@ -327,7 +327,7 @@ void BiboumiComponent::handle_iq(const Stanza& stanza)
}
else if (type == "get")
{
- XmlNode* query;
+ const XmlNode* query;
if ((query = stanza.get_child("query", DISCO_INFO_NS)))
{ // Disco info
if (to_str == this->served_hostname)
@@ -405,12 +405,12 @@ void BiboumiComponent::handle_iq(const Stanza& stanza)
else if (type == "result")
{
stanza_error.disable();
- XmlNode* query;
+ const XmlNode* query;
if ((query = stanza.get_child("query", VERSION_NS)))
{
- XmlNode* name_node = query->get_child("name", VERSION_NS);
- XmlNode* version_node = query->get_child("version", VERSION_NS);
- XmlNode* os_node = query->get_child("os", VERSION_NS);
+ const XmlNode* name_node = query->get_child("name", VERSION_NS);
+ const XmlNode* version_node = query->get_child("version", VERSION_NS);
+ const XmlNode* os_node = query->get_child("os", VERSION_NS);
std::string name;
std::string version;
std::string os;