summaryrefslogtreecommitdiff
path: root/src/rexmpp_xml.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/rexmpp_xml.rs')
-rw-r--r--src/rexmpp_xml.rs26
1 files changed, 17 insertions, 9 deletions
diff --git a/src/rexmpp_xml.rs b/src/rexmpp_xml.rs
index 1f9f4d6..717501d 100644
--- a/src/rexmpp_xml.rs
+++ b/src/rexmpp_xml.rs
@@ -975,8 +975,8 @@ fn rexmpp_xml_text_child (node: *mut RexmppXML)
#[no_mangle]
extern "C"
-fn rexmpp_xml_reverse (mut node: *mut RexmppXML)
- -> *mut RexmppXML {
+fn rexmpp_xml_reverse_list (mut node: *mut RexmppXML)
+ -> *mut RexmppXML {
let mut next;
let mut prev = ptr::null_mut();
while node != ptr::null_mut() {
@@ -992,14 +992,22 @@ fn rexmpp_xml_reverse (mut node: *mut RexmppXML)
#[no_mangle]
extern "C"
-fn rexmpp_xml_reverse_all (node: *mut RexmppXML)
- -> *mut RexmppXML {
- let mut cur = node;
- while cur != ptr::null_mut() {
- unsafe {
- if (*cur).node_type == NodeType::Element {
+fn rexmpp_xml_reverse_children (node: *mut RexmppXML)
+ -> *mut RexmppXML {
+ unsafe {
+ if node == ptr::null_mut() || (*node).node_type != NodeType::Element {
+ return node;
+ }
+ (*node).alt.elem.children =
+ rexmpp_xml_reverse_list((*node).alt.elem.children);;
+
+ let mut cur = node;
+ while cur != ptr::null_mut() {
+ if (*cur).node_type == NodeType::Element &&
+ (*cur).alt.elem.children != ptr::null_mut()
+ {
(*cur).alt.elem.children =
- rexmpp_xml_reverse_all((*cur).alt.elem.children);
+ rexmpp_xml_reverse_children((*cur).alt.elem.children);
}
cur = (*cur).next;
}