libpurple/xmlnode.c

Thu, 07 Aug 2025 21:40:13 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 07 Aug 2025 21:40:13 -0500
changeset 43302
e7b0bbfec5d5
parent 43123
4d3b58b6cf06
permissions
-rw-r--r--

Add an avatar-for-display property to Purple.ContactInfo

Testing Done:
Ran the tests under valgrind and called in the turtles.

Reviewed at https://reviews.imfreedom.org/r/4086/

42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
1 /*
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
2 * Purple - Internet Messaging Library
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
4 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15609
diff changeset
5 * Purple is the legal property of its developers, whose names are too numerous
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
8046
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7642
diff changeset
7 * source distribution.
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
8 *
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
9 * This library is free software; you can redistribute it and/or modify it
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
10 * under the terms of the GNU General Public License as published by the Free
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
11 * Software Foundation; either version 2 of the License, or (at your option)
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
12 * any later version.
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
13 *
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
14 * This library is distributed in the hope that it will be useful, but WITHOUT
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
16 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
17 * more details.
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
18 *
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
19 * You should have received a copy of the GNU General Public License along with
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42557
diff changeset
20 * this library; if not, see <https://www.gnu.org/licenses/>.
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
21 */
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
22
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
23 /* A lot of this code at least resembles the code in libxode, but since
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
24 * libxode uses memory pools that we simply have no need for, I decided to
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
25 * write my own stuff. Also, re-writing this lets me be as lightweight
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
26 * as I want to be. Thank you libxode for giving me a good starting point */
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
27
40441
f23c7e772667 Make sure we're not including the gettext macros in header files and deal with the repercussions of that.
Gary Kramlich <grim@reaperworld.com>
parents: 40094
diff changeset
28 #include <glib/gi18n-lib.h>
f23c7e772667 Make sure we're not including the gettext macros in header files and deal with the repercussions of that.
Gary Kramlich <grim@reaperworld.com>
parents: 40094
diff changeset
29
15977
057b184c15d9 Don't advertise that we support the adverts, invite and translate
Mark Doliner <markdoliner@pidgin.im>
parents: 15884
diff changeset
30 #include "debug.h"
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
31
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
32 #include <libxml/parser.h>
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
33 #include <string.h>
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
34 #include <glib.h>
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
35
40564
2c5b4dc2e86a Pull the purple_markup_* api out of util.[ch] to purplemarkup.[ch]. No code was changed just moved it from one file to the other.
Gary Kramlich <grim@reaperworld.com>
parents: 40441
diff changeset
36 #include "purplemarkup.h"
14233
4f5fe687b21d [gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14097
diff changeset
37 #include "util.h"
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
38 #include "xmlnode.h"
40756
3a58ef28ee44 Implement mitigation for GHSL-2021-045
Gary Kramlich <grim@reaperworld.com>
parents: 40650
diff changeset
39 #include "glibcompat.h"
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
40
12041
a297893ebdbd [gaim-migrate @ 14334]
Daniel Atallah <datallah@pidgin.im>
parents: 11705
diff changeset
41 #ifdef _WIN32
a297893ebdbd [gaim-migrate @ 14334]
Daniel Atallah <datallah@pidgin.im>
parents: 11705
diff changeset
42 # define NEWLINE_S "\r\n"
a297893ebdbd [gaim-migrate @ 14334]
Daniel Atallah <datallah@pidgin.im>
parents: 11705
diff changeset
43 #else
a297893ebdbd [gaim-migrate @ 14334]
Daniel Atallah <datallah@pidgin.im>
parents: 11705
diff changeset
44 # define NEWLINE_S "\n"
a297893ebdbd [gaim-migrate @ 14334]
Daniel Atallah <datallah@pidgin.im>
parents: 11705
diff changeset
45 #endif
a297893ebdbd [gaim-migrate @ 14334]
Daniel Atallah <datallah@pidgin.im>
parents: 11705
diff changeset
46
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
47 static PurpleXmlNode*
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
48 new_node(const char *name, PurpleXmlNodeType type)
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
49 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
50 PurpleXmlNode *node = g_new0(PurpleXmlNode, 1);
10423
4663a8238def [gaim-migrate @ 11675]
Mark Doliner <markdoliner@pidgin.im>
parents: 10415
diff changeset
51
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 13833
diff changeset
52 node->name = g_strdup(name);
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
53 node->type = type;
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
54
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
55 return node;
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
56 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
57
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
58 PurpleXmlNode*
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
59 purple_xmlnode_new(const char *name)
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
60 {
31935
77896a9a09c2 jabber: Check for empty string when setting mood.
Paul Aurich <darkrain42@pidgin.im>
parents: 31549
diff changeset
61 g_return_val_if_fail(name != NULL && *name != '\0', NULL);
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
62
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
63 return new_node(name, PURPLE_XMLNODE_TYPE_TAG);
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
64 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
65
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
66 PurpleXmlNode *
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
67 purple_xmlnode_new_child(PurpleXmlNode *parent, const char *name)
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
68 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
69 PurpleXmlNode *node;
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
70
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
71 g_return_val_if_fail(parent != NULL, NULL);
31935
77896a9a09c2 jabber: Check for empty string when setting mood.
Paul Aurich <darkrain42@pidgin.im>
parents: 31549
diff changeset
72 g_return_val_if_fail(name != NULL && *name != '\0', NULL);
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
73
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
74 node = new_node(name, PURPLE_XMLNODE_TYPE_TAG);
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
75
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
76 purple_xmlnode_insert_child(parent, node);
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
77
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
78 return node;
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
79 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
80
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
81 void
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
82 purple_xmlnode_insert_child(PurpleXmlNode *parent, PurpleXmlNode *child)
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
83 {
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
84 g_return_if_fail(parent != NULL);
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
85 g_return_if_fail(child != NULL);
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
86
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
87 child->parent = parent;
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
88
12233
0570720fee6c [gaim-migrate @ 14535]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12198
diff changeset
89 if(parent->lastchild) {
0570720fee6c [gaim-migrate @ 14535]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12198
diff changeset
90 parent->lastchild->next = child;
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
91 } else {
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
92 parent->child = child;
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
93 }
12233
0570720fee6c [gaim-migrate @ 14535]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12198
diff changeset
94
0570720fee6c [gaim-migrate @ 14535]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12198
diff changeset
95 parent->lastchild = child;
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
96 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
97
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
98 void
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
99 purple_xmlnode_insert_data(PurpleXmlNode *node, const char *data, gssize size)
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
100 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
101 PurpleXmlNode *child;
10848
43c8f0954e21 [gaim-migrate @ 12520]
Nathan Walp <nwalp@pidgin.im>
parents: 10736
diff changeset
102 gsize real_size;
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
103
10415
faceb835eb87 [gaim-migrate @ 11665]
Mark Doliner <markdoliner@pidgin.im>
parents: 10331
diff changeset
104 g_return_if_fail(node != NULL);
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
105 g_return_if_fail(data != NULL);
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
106 g_return_if_fail(size != 0);
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
107
36256
a437550a9308 Remove -Wno-sign-compare and backport fixes from default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 36025
diff changeset
108 real_size = size == -1 ? strlen(data) : (gsize)size;
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
109
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
110 child = new_node(NULL, PURPLE_XMLNODE_TYPE_DATA);
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
111
40756
3a58ef28ee44 Implement mitigation for GHSL-2021-045
Gary Kramlich <grim@reaperworld.com>
parents: 40650
diff changeset
112 child->data = g_memdup2(data, real_size);
10415
faceb835eb87 [gaim-migrate @ 11665]
Mark Doliner <markdoliner@pidgin.im>
parents: 10331
diff changeset
113 child->data_sz = real_size;
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
114
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
115 purple_xmlnode_insert_child(node, child);
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
116 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
117
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
118 void
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
119 purple_xmlnode_remove_attrib(PurpleXmlNode *node, const char *attr)
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
120 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
121 PurpleXmlNode *attr_node, *sibling = NULL;
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
122
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
123 g_return_if_fail(node != NULL);
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
124 g_return_if_fail(attr != NULL);
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
125
26393
7420fd99903a Add xmlnode_set_attrib_full that enables you to set an attribute with both
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
126 attr_node = node->child;
7420fd99903a Add xmlnode_set_attrib_full that enables you to set an attribute with both
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
127 while (attr_node) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
128 if(attr_node->type == PURPLE_XMLNODE_TYPE_ATTRIB &&
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 25854
diff changeset
129 purple_strequal(attr_node->name, attr))
15277
7f9e97dffc4f [gaim-migrate @ 18005]
Mark Doliner <markdoliner@pidgin.im>
parents: 15265
diff changeset
130 {
7f9e97dffc4f [gaim-migrate @ 18005]
Mark Doliner <markdoliner@pidgin.im>
parents: 15265
diff changeset
131 if (node->lastchild == attr_node) {
7f9e97dffc4f [gaim-migrate @ 18005]
Mark Doliner <markdoliner@pidgin.im>
parents: 15265
diff changeset
132 node->lastchild = sibling;
7f9e97dffc4f [gaim-migrate @ 18005]
Mark Doliner <markdoliner@pidgin.im>
parents: 15265
diff changeset
133 }
26393
7420fd99903a Add xmlnode_set_attrib_full that enables you to set an attribute with both
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
134 if (sibling == NULL) {
7420fd99903a Add xmlnode_set_attrib_full that enables you to set an attribute with both
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
135 node->child = attr_node->next;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
136 purple_xmlnode_free(attr_node);
26393
7420fd99903a Add xmlnode_set_attrib_full that enables you to set an attribute with both
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
137 attr_node = node->child;
7420fd99903a Add xmlnode_set_attrib_full that enables you to set an attribute with both
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
138 } else {
7420fd99903a Add xmlnode_set_attrib_full that enables you to set an attribute with both
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
139 sibling->next = attr_node->next;
7420fd99903a Add xmlnode_set_attrib_full that enables you to set an attribute with both
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
140 sibling = attr_node->next;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
141 purple_xmlnode_free(attr_node);
26393
7420fd99903a Add xmlnode_set_attrib_full that enables you to set an attribute with both
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
142 attr_node = sibling;
7420fd99903a Add xmlnode_set_attrib_full that enables you to set an attribute with both
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
143 }
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
144 } else {
26393
7420fd99903a Add xmlnode_set_attrib_full that enables you to set an attribute with both
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
145 attr_node = attr_node->next;
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
146 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
147 sibling = attr_node;
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
148 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
149 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
150
15265
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
151 void
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
152 purple_xmlnode_remove_attrib_with_namespace(PurpleXmlNode *node, const char *attr, const char *xmlns)
15265
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
153 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
154 PurpleXmlNode *attr_node, *sibling = NULL;
15265
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
155
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
156 g_return_if_fail(node != NULL);
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
157 g_return_if_fail(attr != NULL);
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
158
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
159 for(attr_node = node->child; attr_node; attr_node = attr_node->next) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
160 if(attr_node->type == PURPLE_XMLNODE_TYPE_ATTRIB &&
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 25854
diff changeset
161 purple_strequal(attr, attr_node->name) &&
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 25854
diff changeset
162 purple_strequal(xmlns, attr_node->xmlns))
15277
7f9e97dffc4f [gaim-migrate @ 18005]
Mark Doliner <markdoliner@pidgin.im>
parents: 15265
diff changeset
163 {
20228
ce019944d765 applied changes from 9d35dde0c779cca73548172223ba557f27d61882
Luke Schierer <lschiere@pidgin.im>
parents: 20224
diff changeset
164 if(sibling == NULL) {
15265
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
165 node->child = attr_node->next;
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
166 } else {
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
167 sibling->next = attr_node->next;
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
168 }
15277
7f9e97dffc4f [gaim-migrate @ 18005]
Mark Doliner <markdoliner@pidgin.im>
parents: 15265
diff changeset
169 if (node->lastchild == attr_node) {
7f9e97dffc4f [gaim-migrate @ 18005]
Mark Doliner <markdoliner@pidgin.im>
parents: 15265
diff changeset
170 node->lastchild = sibling;
7f9e97dffc4f [gaim-migrate @ 18005]
Mark Doliner <markdoliner@pidgin.im>
parents: 15265
diff changeset
171 }
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
172 purple_xmlnode_free(attr_node);
15265
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
173 return;
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
174 }
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
175 sibling = attr_node;
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
176 }
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
177 }
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
178
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
179 void
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
180 purple_xmlnode_set_attrib(PurpleXmlNode *node, const char *attr, const char *value)
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
181 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
182 purple_xmlnode_remove_attrib(node, attr);
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
183 purple_xmlnode_set_attrib_full(node, attr, NULL, NULL, value);
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
184 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
185
15265
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
186 void
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
187 purple_xmlnode_set_attrib_full(PurpleXmlNode *node, const char *attr, const char *xmlns, const char *prefix, const char *value)
26393
7420fd99903a Add xmlnode_set_attrib_full that enables you to set an attribute with both
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
188 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
189 PurpleXmlNode *attrib_node;
15265
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
190
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
191 g_return_if_fail(node != NULL);
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
192 g_return_if_fail(attr != NULL);
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
193 g_return_if_fail(value != NULL);
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
194
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
195 purple_xmlnode_remove_attrib_with_namespace(node, attr, xmlns);
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
196 attrib_node = new_node(attr, PURPLE_XMLNODE_TYPE_ATTRIB);
15265
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
197
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
198 attrib_node->data = g_strdup(value);
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
199 attrib_node->xmlns = g_strdup(xmlns);
21454
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
200 attrib_node->prefix = g_strdup(prefix);
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
201
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
202 purple_xmlnode_insert_child(node, attrib_node);
21454
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
203 }
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
204
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
205
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
206 const char *
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
207 purple_xmlnode_get_attrib(const PurpleXmlNode *node, const char *attr)
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
208 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
209 PurpleXmlNode *x;
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
210
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
211 g_return_val_if_fail(node != NULL, NULL);
24639
609d4605c8db Fix CID #391, #392
Richard Laager <rlaager@pidgin.im>
parents: 23821
diff changeset
212 g_return_val_if_fail(attr != NULL, NULL);
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
213
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
214 for(x = node->child; x; x = x->next) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
215 if(x->type == PURPLE_XMLNODE_TYPE_ATTRIB && purple_strequal(attr, x->name)) {
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
216 return x->data;
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
217 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
218 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
219
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
220 return NULL;
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
221 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
222
15265
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
223 const char *
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
224 purple_xmlnode_get_attrib_with_namespace(const PurpleXmlNode *node, const char *attr, const char *xmlns)
15265
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
225 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
226 const PurpleXmlNode *x;
15265
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
227
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
228 g_return_val_if_fail(node != NULL, NULL);
24639
609d4605c8db Fix CID #391, #392
Richard Laager <rlaager@pidgin.im>
parents: 23821
diff changeset
229 g_return_val_if_fail(attr != NULL, NULL);
15265
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
230
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
231 for(x = node->child; x; x = x->next) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
232 if(x->type == PURPLE_XMLNODE_TYPE_ATTRIB &&
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 25854
diff changeset
233 purple_strequal(attr, x->name) &&
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 25854
diff changeset
234 purple_strequal(xmlns, x->xmlns)) {
15265
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
235 return x->data;
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
236 }
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
237 }
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
238
15277
7f9e97dffc4f [gaim-migrate @ 18005]
Mark Doliner <markdoliner@pidgin.im>
parents: 15265
diff changeset
239 return NULL;
15265
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
240 }
a5b0ab58b05d [gaim-migrate @ 17993]
Sean Egan <seanegan@pidgin.im>
parents: 15238
diff changeset
241
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
242
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
243 void purple_xmlnode_set_namespace(PurpleXmlNode *node, const char *xmlns)
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
244 {
32322
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
245 char *tmp;
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
246 g_return_if_fail(node != NULL);
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
247
32322
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
248 tmp = node->xmlns;
15238
e52522b871ee [gaim-migrate @ 17963]
Mark Doliner <markdoliner@pidgin.im>
parents: 15184
diff changeset
249 node->xmlns = g_strdup(xmlns);
32322
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
250
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
251 if (node->namespace_map) {
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
252 g_hash_table_insert(node->namespace_map,
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
253 g_strdup(""), g_strdup(xmlns));
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
254 }
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
255
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
256 g_free(tmp);
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
257 }
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
258
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
259 const char *purple_xmlnode_get_namespace(const PurpleXmlNode *node)
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
260 {
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
261 g_return_val_if_fail(node != NULL, NULL);
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
262
15238
e52522b871ee [gaim-migrate @ 17963]
Mark Doliner <markdoliner@pidgin.im>
parents: 15184
diff changeset
263 return node->xmlns;
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
264 }
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
265
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
266 const char *purple_xmlnode_get_default_namespace(const PurpleXmlNode *node)
32321
ae17a89ef666 xmlnode: Fix some brokeness in xmlnode serialization with prefixed elements.
Paul Aurich <darkrain42@pidgin.im>
parents: 32313
diff changeset
267 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
268 const PurpleXmlNode *current_node;
32321
ae17a89ef666 xmlnode: Fix some brokeness in xmlnode serialization with prefixed elements.
Paul Aurich <darkrain42@pidgin.im>
parents: 32313
diff changeset
269 const char *ns = NULL;
32322
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
270
32321
ae17a89ef666 xmlnode: Fix some brokeness in xmlnode serialization with prefixed elements.
Paul Aurich <darkrain42@pidgin.im>
parents: 32313
diff changeset
271 g_return_val_if_fail(node != NULL, NULL);
ae17a89ef666 xmlnode: Fix some brokeness in xmlnode serialization with prefixed elements.
Paul Aurich <darkrain42@pidgin.im>
parents: 32313
diff changeset
272
32322
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
273 current_node = node;
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
274 while (current_node) {
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
275 /* If this node does *not* have a prefix, node->xmlns is the default
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
276 * namespace. Otherwise, it's the prefix namespace.
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
277 */
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
278 if (!current_node->prefix && current_node->xmlns) {
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
279 return current_node->xmlns;
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
280 } else if (current_node->namespace_map) {
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
281 ns = g_hash_table_lookup(current_node->namespace_map, "");
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
282 if (ns && *ns) {
32322
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
283 return ns;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
284 }
32322
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
285 }
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
286
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
287 current_node = current_node->parent;
32321
ae17a89ef666 xmlnode: Fix some brokeness in xmlnode serialization with prefixed elements.
Paul Aurich <darkrain42@pidgin.im>
parents: 32313
diff changeset
288 }
ae17a89ef666 xmlnode: Fix some brokeness in xmlnode serialization with prefixed elements.
Paul Aurich <darkrain42@pidgin.im>
parents: 32313
diff changeset
289
ae17a89ef666 xmlnode: Fix some brokeness in xmlnode serialization with prefixed elements.
Paul Aurich <darkrain42@pidgin.im>
parents: 32313
diff changeset
290 return ns;
ae17a89ef666 xmlnode: Fix some brokeness in xmlnode serialization with prefixed elements.
Paul Aurich <darkrain42@pidgin.im>
parents: 32313
diff changeset
291 }
ae17a89ef666 xmlnode: Fix some brokeness in xmlnode serialization with prefixed elements.
Paul Aurich <darkrain42@pidgin.im>
parents: 32313
diff changeset
292
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
293 void purple_xmlnode_set_prefix(PurpleXmlNode *node, const char *prefix)
21454
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
294 {
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
295 g_return_if_fail(node != NULL);
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
296
42767
8cf1d11b59c1 Use g_set_str everywhere
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42633
diff changeset
297 g_set_str(&node->prefix, prefix);
21454
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
298 }
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
299
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
300 const char *purple_xmlnode_get_prefix(const PurpleXmlNode *node)
21454
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
301 {
21720
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21487
diff changeset
302 g_return_val_if_fail(node != NULL, NULL);
21454
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
303 return node->prefix;
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
304 }
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
305
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
306 const char *purple_xmlnode_get_prefix_namespace(const PurpleXmlNode *node, const char *prefix)
32322
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
307 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
308 const PurpleXmlNode *current_node;
32322
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
309
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
310 g_return_val_if_fail(node != NULL, NULL);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
311 g_return_val_if_fail(prefix != NULL, purple_xmlnode_get_default_namespace(node));
32322
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
312
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
313 current_node = node;
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
314 while (current_node) {
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
315 if (current_node->prefix && g_str_equal(prefix, current_node->prefix) &&
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
316 current_node->xmlns) {
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
317 return current_node->xmlns;
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
318 } else if (current_node->namespace_map) {
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
319 const char *ns = g_hash_table_lookup(current_node->namespace_map, prefix);
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
320 if (ns && *ns) {
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
321 return ns;
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
322 }
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
323 }
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
324
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
325 current_node = current_node->parent;
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
326 }
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
327
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
328 return NULL;
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
329 }
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
330
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
331 void purple_xmlnode_strip_prefixes(PurpleXmlNode *node)
32322
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
332 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
333 PurpleXmlNode *child;
32322
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
334 const char *prefix;
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
335
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
336 g_return_if_fail(node != NULL);
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
337
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
338 for (child = node->child; child; child = child->next) {
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
339 if (child->type == PURPLE_XMLNODE_TYPE_TAG) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
340 purple_xmlnode_strip_prefixes(child);
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
341 }
32322
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
342 }
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
343
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
344 prefix = purple_xmlnode_get_prefix(node);
32322
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
345 if (prefix) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
346 const char *ns = purple_xmlnode_get_prefix_namespace(node, prefix);
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
347 purple_xmlnode_set_namespace(node, ns);
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
348 purple_xmlnode_set_prefix(node, NULL);
32322
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
349 } else {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
350 purple_xmlnode_set_namespace(node, purple_xmlnode_get_default_namespace(node));
32322
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
351 }
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
352 }
5c1dd6d9d57f xmlnode: Add xmlnode_strip_prefixes
Paul Aurich <darkrain42@pidgin.im>
parents: 32321
diff changeset
353
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
354 PurpleXmlNode *purple_xmlnode_get_parent(const PurpleXmlNode *child)
23750
57baab09bf45 Added xmlnode_get_parent.
Michael Ruprecht <maiku@pidgin.im>
parents: 22083
diff changeset
355 {
57baab09bf45 Added xmlnode_get_parent.
Michael Ruprecht <maiku@pidgin.im>
parents: 22083
diff changeset
356 g_return_val_if_fail(child != NULL, NULL);
57baab09bf45 Added xmlnode_get_parent.
Michael Ruprecht <maiku@pidgin.im>
parents: 22083
diff changeset
357 return child->parent;
57baab09bf45 Added xmlnode_get_parent.
Michael Ruprecht <maiku@pidgin.im>
parents: 22083
diff changeset
358 }
57baab09bf45 Added xmlnode_get_parent.
Michael Ruprecht <maiku@pidgin.im>
parents: 22083
diff changeset
359
10423
4663a8238def [gaim-migrate @ 11675]
Mark Doliner <markdoliner@pidgin.im>
parents: 10415
diff changeset
360 void
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
361 purple_xmlnode_free(PurpleXmlNode *node)
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
362 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
363 PurpleXmlNode *x, *y;
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
364
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
365 g_return_if_fail(node != NULL);
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
366
18315
10dbbd7540b8 fix a buddy icon bug in jabber
Nathan Walp <nwalp@pidgin.im>
parents: 18131
diff changeset
367 /* if we're part of a tree, remove ourselves from the tree first */
10dbbd7540b8 fix a buddy icon bug in jabber
Nathan Walp <nwalp@pidgin.im>
parents: 18131
diff changeset
368 if(NULL != node->parent) {
10dbbd7540b8 fix a buddy icon bug in jabber
Nathan Walp <nwalp@pidgin.im>
parents: 18131
diff changeset
369 if(node->parent->child == node) {
10dbbd7540b8 fix a buddy icon bug in jabber
Nathan Walp <nwalp@pidgin.im>
parents: 18131
diff changeset
370 node->parent->child = node->next;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
371 if (node->parent->lastchild == node) {
19568
1daa0179da7b xmlnode bugfix patch from Mauro Brasil
Sean Egan <seanegan@pidgin.im>
parents: 18315
diff changeset
372 node->parent->lastchild = node->next;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
373 }
18315
10dbbd7540b8 fix a buddy icon bug in jabber
Nathan Walp <nwalp@pidgin.im>
parents: 18131
diff changeset
374 } else {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
375 PurpleXmlNode *prev = node->parent->child;
18315
10dbbd7540b8 fix a buddy icon bug in jabber
Nathan Walp <nwalp@pidgin.im>
parents: 18131
diff changeset
376 while(prev && prev->next != node) {
10dbbd7540b8 fix a buddy icon bug in jabber
Nathan Walp <nwalp@pidgin.im>
parents: 18131
diff changeset
377 prev = prev->next;
10dbbd7540b8 fix a buddy icon bug in jabber
Nathan Walp <nwalp@pidgin.im>
parents: 18131
diff changeset
378 }
10dbbd7540b8 fix a buddy icon bug in jabber
Nathan Walp <nwalp@pidgin.im>
parents: 18131
diff changeset
379 if(prev) {
10dbbd7540b8 fix a buddy icon bug in jabber
Nathan Walp <nwalp@pidgin.im>
parents: 18131
diff changeset
380 prev->next = node->next;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
381 if (node->parent->lastchild == node) {
19568
1daa0179da7b xmlnode bugfix patch from Mauro Brasil
Sean Egan <seanegan@pidgin.im>
parents: 18315
diff changeset
382 node->parent->lastchild = prev;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
383 }
18315
10dbbd7540b8 fix a buddy icon bug in jabber
Nathan Walp <nwalp@pidgin.im>
parents: 18131
diff changeset
384 }
10dbbd7540b8 fix a buddy icon bug in jabber
Nathan Walp <nwalp@pidgin.im>
parents: 18131
diff changeset
385 }
10dbbd7540b8 fix a buddy icon bug in jabber
Nathan Walp <nwalp@pidgin.im>
parents: 18131
diff changeset
386 }
10dbbd7540b8 fix a buddy icon bug in jabber
Nathan Walp <nwalp@pidgin.im>
parents: 18131
diff changeset
387
10dbbd7540b8 fix a buddy icon bug in jabber
Nathan Walp <nwalp@pidgin.im>
parents: 18131
diff changeset
388 /* now free our children */
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
389 x = node->child;
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
390 while(x) {
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
391 y = x->next;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
392 purple_xmlnode_free(x);
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
393 x = y;
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
394 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
395
18315
10dbbd7540b8 fix a buddy icon bug in jabber
Nathan Walp <nwalp@pidgin.im>
parents: 18131
diff changeset
396 /* now dispose of ourselves */
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 13833
diff changeset
397 g_free(node->name);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 13833
diff changeset
398 g_free(node->data);
15238
e52522b871ee [gaim-migrate @ 17963]
Mark Doliner <markdoliner@pidgin.im>
parents: 15184
diff changeset
399 g_free(node->xmlns);
22061
32b0036ef621 fix a leak
Ka-Hing Cheung <khc@pidgin.im>
parents: 21720
diff changeset
400 g_free(node->prefix);
14386
5563ea640401 [gaim-migrate @ 17019]
Nathan Walp <nwalp@pidgin.im>
parents: 14384
diff changeset
401
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
402 g_clear_pointer(&node->namespace_map, g_hash_table_destroy);
21720
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21487
diff changeset
403
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
404 g_free(node);
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
405 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
406
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
407 PurpleXmlNode*
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
408 purple_xmlnode_get_child(const PurpleXmlNode *parent, const char *name)
10736
fb529f29c25c [gaim-migrate @ 12338]
Mark Doliner <markdoliner@pidgin.im>
parents: 10425
diff changeset
409 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
410 return purple_xmlnode_get_child_with_namespace(parent, name, NULL);
10736
fb529f29c25c [gaim-migrate @ 12338]
Mark Doliner <markdoliner@pidgin.im>
parents: 10425
diff changeset
411 }
fb529f29c25c [gaim-migrate @ 12338]
Mark Doliner <markdoliner@pidgin.im>
parents: 10425
diff changeset
412
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
413 PurpleXmlNode *
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
414 purple_xmlnode_get_child_with_namespace(const PurpleXmlNode *parent, const char *name, const char *ns)
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
415 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
416 PurpleXmlNode *x, *ret = NULL;
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
417 char **names;
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
418 char *parent_name, *child_name;
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
419
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
420 g_return_val_if_fail(parent != NULL, NULL);
12233
0570720fee6c [gaim-migrate @ 14535]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12198
diff changeset
421 g_return_val_if_fail(name != NULL, NULL);
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
422
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
423 names = g_strsplit(name, "/", 2);
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
424 parent_name = names[0];
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
425 child_name = names[1];
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
426
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
427 for(x = parent->child; x; x = x->next) {
20224
d4b827c606db applied changes from 4d50bf3b08569aa2108a9f5da47fb1548d0c7dd9
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
428 /* XXX: Is it correct to ignore the namespace for the match if none was specified? */
8262
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8167
diff changeset
429 const char *xmlns = NULL;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
430 if(ns) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
431 xmlns = purple_xmlnode_get_namespace(x);
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
432 }
8262
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8167
diff changeset
433
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
434 if(x->type == PURPLE_XMLNODE_TYPE_TAG && purple_strequal(parent_name, x->name)
25859
b42be7bb9dac Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <darkrain42@pidgin.im>
parents: 25854
diff changeset
435 && purple_strequal(ns, xmlns)) {
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
436 ret = x;
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
437 break;
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
438 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
439 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
440
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
441 if(child_name && ret) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
442 ret = purple_xmlnode_get_child(ret, child_name);
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
443 }
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
444
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
445 g_strfreev(names);
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
446 return ret;
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
447 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
448
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
449 char *
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
450 purple_xmlnode_get_data(const PurpleXmlNode *node)
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
451 {
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
452 GString *str = NULL;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
453 PurpleXmlNode *c;
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
454
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
455 g_return_val_if_fail(node != NULL, NULL);
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
456
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
457 for(c = node->child; c; c = c->next) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
458 if(c->type == PURPLE_XMLNODE_TYPE_DATA) {
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
459 if(!str) {
18131
7127441da3ba add xmlnode_get_data_unescaped(), and got rid of an unecessary realloc
Nathan Walp <nwalp@pidgin.im>
parents: 17550
diff changeset
460 str = g_string_new_len(c->data, c->data_sz);
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
461 } else {
18131
7127441da3ba add xmlnode_get_data_unescaped(), and got rid of an unecessary realloc
Nathan Walp <nwalp@pidgin.im>
parents: 17550
diff changeset
462 str = g_string_append_len(str, c->data, c->data_sz);
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
463 }
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
464 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
465 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
466
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
467 if (str == NULL) {
10331
9955b6f7c998 [gaim-migrate @ 11538]
Mark Doliner <markdoliner@pidgin.im>
parents: 9838
diff changeset
468 return NULL;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
469 }
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
470
43123
4d3b58b6cf06 Use g_string_free_and_steal
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42834
diff changeset
471 return g_string_free_and_steal(str);
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
472 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
473
18131
7127441da3ba add xmlnode_get_data_unescaped(), and got rid of an unecessary realloc
Nathan Walp <nwalp@pidgin.im>
parents: 17550
diff changeset
474 char *
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
475 purple_xmlnode_get_data_unescaped(const PurpleXmlNode *node)
18131
7127441da3ba add xmlnode_get_data_unescaped(), and got rid of an unecessary realloc
Nathan Walp <nwalp@pidgin.im>
parents: 17550
diff changeset
476 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
477 char *escaped = purple_xmlnode_get_data(node);
18131
7127441da3ba add xmlnode_get_data_unescaped(), and got rid of an unecessary realloc
Nathan Walp <nwalp@pidgin.im>
parents: 17550
diff changeset
478
7127441da3ba add xmlnode_get_data_unescaped(), and got rid of an unecessary realloc
Nathan Walp <nwalp@pidgin.im>
parents: 17550
diff changeset
479 char *unescaped = escaped ? purple_unescape_html(escaped) : NULL;
7127441da3ba add xmlnode_get_data_unescaped(), and got rid of an unecessary realloc
Nathan Walp <nwalp@pidgin.im>
parents: 17550
diff changeset
480
7127441da3ba add xmlnode_get_data_unescaped(), and got rid of an unecessary realloc
Nathan Walp <nwalp@pidgin.im>
parents: 17550
diff changeset
481 g_free(escaped);
7127441da3ba add xmlnode_get_data_unescaped(), and got rid of an unecessary realloc
Nathan Walp <nwalp@pidgin.im>
parents: 17550
diff changeset
482
7127441da3ba add xmlnode_get_data_unescaped(), and got rid of an unecessary realloc
Nathan Walp <nwalp@pidgin.im>
parents: 17550
diff changeset
483 return unescaped;
7127441da3ba add xmlnode_get_data_unescaped(), and got rid of an unecessary realloc
Nathan Walp <nwalp@pidgin.im>
parents: 17550
diff changeset
484 }
7127441da3ba add xmlnode_get_data_unescaped(), and got rid of an unecessary realloc
Nathan Walp <nwalp@pidgin.im>
parents: 17550
diff changeset
485
21454
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
486 static void
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
487 purple_xmlnode_to_str_foreach_append_ns(const char *key, const char *value,
21454
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
488 GString *buf)
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
489 {
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
490 if (*key) {
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
491 g_string_append_printf(buf, " xmlns:%s='%s'", key, value);
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
492 } else {
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
493 g_string_append_printf(buf, " xmlns='%s'", value);
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
494 }
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
495 }
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
496
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
497 static char *
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
498 purple_xmlnode_to_str_helper(const PurpleXmlNode *node, int *len, gboolean formatting, int depth)
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
499 {
39918
1c8e11f9274f Fix several memory leaks.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39659
diff changeset
500 GString *text;
21454
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
501 const char *prefix;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
502 const PurpleXmlNode *c;
9837
789d33edcda8 [gaim-migrate @ 10714]
Nathan Walp <nwalp@pidgin.im>
parents: 8283
diff changeset
503 char *node_name, *esc, *esc2, *tab = NULL;
9838
7320c7b02aac [gaim-migrate @ 10715]
Nathan Walp <nwalp@pidgin.im>
parents: 9837
diff changeset
504 gboolean need_end = FALSE, pretty = formatting;
9837
789d33edcda8 [gaim-migrate @ 10714]
Nathan Walp <nwalp@pidgin.im>
parents: 8283
diff changeset
505
12233
0570720fee6c [gaim-migrate @ 14535]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12198
diff changeset
506 g_return_val_if_fail(node != NULL, NULL);
0570720fee6c [gaim-migrate @ 14535]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12198
diff changeset
507
39918
1c8e11f9274f Fix several memory leaks.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39659
diff changeset
508 text = g_string_new("");
1c8e11f9274f Fix several memory leaks.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39659
diff changeset
509
9837
789d33edcda8 [gaim-migrate @ 10714]
Nathan Walp <nwalp@pidgin.im>
parents: 8283
diff changeset
510 if(pretty && depth) {
789d33edcda8 [gaim-migrate @ 10714]
Nathan Walp <nwalp@pidgin.im>
parents: 8283
diff changeset
511 tab = g_strnfill(depth, '\t');
789d33edcda8 [gaim-migrate @ 10714]
Nathan Walp <nwalp@pidgin.im>
parents: 8283
diff changeset
512 text = g_string_append(text, tab);
789d33edcda8 [gaim-migrate @ 10714]
Nathan Walp <nwalp@pidgin.im>
parents: 8283
diff changeset
513 }
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
514
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
515 node_name = g_markup_escape_text(node->name, -1);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
516 prefix = purple_xmlnode_get_prefix(node);
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
517
21454
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
518 if (prefix) {
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
519 g_string_append_printf(text, "<%s:%s", prefix, node_name);
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
520 } else {
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
521 g_string_append_printf(text, "<%s", node_name);
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
522 }
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
523
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
524 if (node->namespace_map) {
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
525 g_hash_table_foreach(node->namespace_map,
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
526 (GHFunc)purple_xmlnode_to_str_foreach_append_ns, text);
32321
ae17a89ef666 xmlnode: Fix some brokeness in xmlnode serialization with prefixed elements.
Paul Aurich <darkrain42@pidgin.im>
parents: 32313
diff changeset
527 } else {
ae17a89ef666 xmlnode: Fix some brokeness in xmlnode serialization with prefixed elements.
Paul Aurich <darkrain42@pidgin.im>
parents: 32313
diff changeset
528 /* Figure out if this node has a different default namespace from parent */
ae17a89ef666 xmlnode: Fix some brokeness in xmlnode serialization with prefixed elements.
Paul Aurich <darkrain42@pidgin.im>
parents: 32313
diff changeset
529 const char *xmlns = NULL;
ae17a89ef666 xmlnode: Fix some brokeness in xmlnode serialization with prefixed elements.
Paul Aurich <darkrain42@pidgin.im>
parents: 32313
diff changeset
530 const char *parent_xmlns = NULL;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
531 if (!prefix) {
32321
ae17a89ef666 xmlnode: Fix some brokeness in xmlnode serialization with prefixed elements.
Paul Aurich <darkrain42@pidgin.im>
parents: 32313
diff changeset
532 xmlns = node->xmlns;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
533 }
32321
ae17a89ef666 xmlnode: Fix some brokeness in xmlnode serialization with prefixed elements.
Paul Aurich <darkrain42@pidgin.im>
parents: 32313
diff changeset
534
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
535 if (!xmlns) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
536 xmlns = purple_xmlnode_get_default_namespace(node);
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
537 }
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
538 if (node->parent) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
539 parent_xmlns = purple_xmlnode_get_default_namespace(node->parent);
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
540 }
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
541 if (!purple_strequal(xmlns, parent_xmlns)) {
32321
ae17a89ef666 xmlnode: Fix some brokeness in xmlnode serialization with prefixed elements.
Paul Aurich <darkrain42@pidgin.im>
parents: 32313
diff changeset
542 char *escaped_xmlns = g_markup_escape_text(xmlns, -1);
ae17a89ef666 xmlnode: Fix some brokeness in xmlnode serialization with prefixed elements.
Paul Aurich <darkrain42@pidgin.im>
parents: 32313
diff changeset
543 g_string_append_printf(text, " xmlns='%s'", escaped_xmlns);
ae17a89ef666 xmlnode: Fix some brokeness in xmlnode serialization with prefixed elements.
Paul Aurich <darkrain42@pidgin.im>
parents: 32313
diff changeset
544 g_free(escaped_xmlns);
15184
869df04993d3 [gaim-migrate @ 17908]
Nathan Walp <nwalp@pidgin.im>
parents: 14690
diff changeset
545 }
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
546 }
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
547 for(c = node->child; c; c = c->next) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
548 if(c->type == PURPLE_XMLNODE_TYPE_ATTRIB) {
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
549 const char *aprefix = purple_xmlnode_get_prefix(c);
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
550 esc = g_markup_escape_text(c->name, -1);
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
551 esc2 = g_markup_escape_text(c->data, -1);
21454
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
552 if (aprefix) {
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
553 g_string_append_printf(text, " %s:%s='%s'", aprefix, esc, esc2);
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
554 } else {
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
555 g_string_append_printf(text, " %s='%s'", esc, esc2);
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
556 }
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
557 g_free(esc);
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
558 g_free(esc2);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
559 } else if(c->type == PURPLE_XMLNODE_TYPE_TAG || c->type == PURPLE_XMLNODE_TYPE_DATA) {
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
560 if(c->type == PURPLE_XMLNODE_TYPE_DATA) {
9838
7320c7b02aac [gaim-migrate @ 10715]
Nathan Walp <nwalp@pidgin.im>
parents: 9837
diff changeset
561 pretty = FALSE;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
562 }
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
563 need_end = TRUE;
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
564 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
565 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
566
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
567 if(need_end) {
12041
a297893ebdbd [gaim-migrate @ 14334]
Daniel Atallah <datallah@pidgin.im>
parents: 11705
diff changeset
568 g_string_append_printf(text, ">%s", pretty ? NEWLINE_S : "");
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
569
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
570 for(c = node->child; c; c = c->next) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
571 if(c->type == PURPLE_XMLNODE_TYPE_TAG) {
7642
4e1735a499f5 [gaim-migrate @ 8285]
Nathan Walp <nwalp@pidgin.im>
parents: 7131
diff changeset
572 int esc_len;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
573 esc = purple_xmlnode_to_str_helper(c, &esc_len, pretty, depth+1);
7642
4e1735a499f5 [gaim-migrate @ 8285]
Nathan Walp <nwalp@pidgin.im>
parents: 7131
diff changeset
574 text = g_string_append_len(text, esc, esc_len);
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
575 g_free(esc);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
576 } else if(c->type == PURPLE_XMLNODE_TYPE_DATA && c->data_sz > 0) {
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
577 esc = g_markup_escape_text(c->data, c->data_sz);
7642
4e1735a499f5 [gaim-migrate @ 8285]
Nathan Walp <nwalp@pidgin.im>
parents: 7131
diff changeset
578 text = g_string_append(text, esc);
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
579 g_free(esc);
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
580 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
581 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
582
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
583 if(tab && pretty) {
9837
789d33edcda8 [gaim-migrate @ 10714]
Nathan Walp <nwalp@pidgin.im>
parents: 8283
diff changeset
584 text = g_string_append(text, tab);
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
585 }
21454
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
586 if (prefix) {
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
587 g_string_append_printf(text, "</%s:%s>%s", prefix, node_name, formatting ? NEWLINE_S : "");
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
588 } else {
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
589 g_string_append_printf(text, "</%s>%s", node_name, formatting ? NEWLINE_S : "");
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
590 }
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
591 } else {
12041
a297893ebdbd [gaim-migrate @ 14334]
Daniel Atallah <datallah@pidgin.im>
parents: 11705
diff changeset
592 g_string_append_printf(text, "/>%s", formatting ? NEWLINE_S : "");
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
593 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
594
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
595 g_free(node_name);
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
596
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 13833
diff changeset
597 g_free(tab);
9837
789d33edcda8 [gaim-migrate @ 10714]
Nathan Walp <nwalp@pidgin.im>
parents: 8283
diff changeset
598
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
599 if(len) {
7642
4e1735a499f5 [gaim-migrate @ 8285]
Nathan Walp <nwalp@pidgin.im>
parents: 7131
diff changeset
600 *len = text->len;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
601 }
10331
9955b6f7c998 [gaim-migrate @ 11538]
Mark Doliner <markdoliner@pidgin.im>
parents: 9838
diff changeset
602
43123
4d3b58b6cf06 Use g_string_free_and_steal
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42834
diff changeset
603 return g_string_free_and_steal(text);
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
604 }
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
605
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
606 char *
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
607 purple_xmlnode_to_str(const PurpleXmlNode *node, int *len)
10423
4663a8238def [gaim-migrate @ 11675]
Mark Doliner <markdoliner@pidgin.im>
parents: 10415
diff changeset
608 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
609 return purple_xmlnode_to_str_helper(node, len, FALSE, 0);
9837
789d33edcda8 [gaim-migrate @ 10714]
Nathan Walp <nwalp@pidgin.im>
parents: 8283
diff changeset
610 }
789d33edcda8 [gaim-migrate @ 10714]
Nathan Walp <nwalp@pidgin.im>
parents: 8283
diff changeset
611
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
612 char *
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
613 purple_xmlnode_to_formatted_str(const PurpleXmlNode *node, int *len)
10423
4663a8238def [gaim-migrate @ 11675]
Mark Doliner <markdoliner@pidgin.im>
parents: 10415
diff changeset
614 {
10425
d82cef15da95 [gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents: 10424
diff changeset
615 char *xml, *xml_with_declaration;
10415
faceb835eb87 [gaim-migrate @ 11665]
Mark Doliner <markdoliner@pidgin.im>
parents: 10331
diff changeset
616
12233
0570720fee6c [gaim-migrate @ 14535]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12198
diff changeset
617 g_return_val_if_fail(node != NULL, NULL);
0570720fee6c [gaim-migrate @ 14535]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12198
diff changeset
618
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
619 xml = purple_xmlnode_to_str_helper(node, len, TRUE, 0);
10415
faceb835eb87 [gaim-migrate @ 11665]
Mark Doliner <markdoliner@pidgin.im>
parents: 10331
diff changeset
620 xml_with_declaration =
12041
a297893ebdbd [gaim-migrate @ 14334]
Daniel Atallah <datallah@pidgin.im>
parents: 11705
diff changeset
621 g_strdup_printf("<?xml version='1.0' encoding='UTF-8' ?>" NEWLINE_S NEWLINE_S "%s", xml);
10415
faceb835eb87 [gaim-migrate @ 11665]
Mark Doliner <markdoliner@pidgin.im>
parents: 10331
diff changeset
622 g_free(xml);
faceb835eb87 [gaim-migrate @ 11665]
Mark Doliner <markdoliner@pidgin.im>
parents: 10331
diff changeset
623
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
624 if (len) {
22083
d562c88d8327 Patch from QuLogic to correctly set the length. Closes #4515.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22061
diff changeset
625 *len += sizeof("<?xml version='1.0' encoding='UTF-8' ?>" NEWLINE_S NEWLINE_S) - 1;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
626 }
22083
d562c88d8327 Patch from QuLogic to correctly set the length. Closes #4515.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22061
diff changeset
627
10415
faceb835eb87 [gaim-migrate @ 11665]
Mark Doliner <markdoliner@pidgin.im>
parents: 10331
diff changeset
628 return xml_with_declaration;
9837
789d33edcda8 [gaim-migrate @ 10714]
Nathan Walp <nwalp@pidgin.im>
parents: 8283
diff changeset
629 }
789d33edcda8 [gaim-migrate @ 10714]
Nathan Walp <nwalp@pidgin.im>
parents: 8283
diff changeset
630
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
631 struct _xmlnode_parser_data {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
632 PurpleXmlNode *current;
15412
def58941bcb9 [gaim-migrate @ 18143]
Sean Egan <seanegan@pidgin.im>
parents: 15277
diff changeset
633 gboolean error;
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
634 };
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
635
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
636 static void
41960
c8a4853205e3 Bump C standard to C99 for libpurple files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41685
diff changeset
637 purple_xmlnode_parser_element_start_libxml(gpointer user_data,
c8a4853205e3 Bump C standard to C99 for libpurple files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41685
diff changeset
638 const xmlChar *element_name,
c8a4853205e3 Bump C standard to C99 for libpurple files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41685
diff changeset
639 const xmlChar *prefix,
c8a4853205e3 Bump C standard to C99 for libpurple files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41685
diff changeset
640 const xmlChar *xmlns,
c8a4853205e3 Bump C standard to C99 for libpurple files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41685
diff changeset
641 int nb_namespaces,
c8a4853205e3 Bump C standard to C99 for libpurple files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41685
diff changeset
642 const xmlChar **namespaces,
c8a4853205e3 Bump C standard to C99 for libpurple files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41685
diff changeset
643 int nb_attributes,
c8a4853205e3 Bump C standard to C99 for libpurple files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41685
diff changeset
644 G_GNUC_UNUSED int nb_defaulted,
c8a4853205e3 Bump C standard to C99 for libpurple files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41685
diff changeset
645 const xmlChar **attributes)
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
646 {
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
647 struct _xmlnode_parser_data *xpd = user_data;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
648 PurpleXmlNode *node;
21454
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
649 int i, j;
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
650
15412
def58941bcb9 [gaim-migrate @ 18143]
Sean Egan <seanegan@pidgin.im>
parents: 15277
diff changeset
651 if(!element_name || xpd->error) {
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
652 return;
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
653 } else {
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
654 if(xpd->current) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
655 node = purple_xmlnode_new_child(xpd->current, (const char*) element_name);
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
656 } else {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
657 node = purple_xmlnode_new((const char *) element_name);
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
658 }
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
659
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
660 purple_xmlnode_set_namespace(node, (const char *) xmlns);
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
661 purple_xmlnode_set_prefix(node, (const char *)prefix);
21454
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
662
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
663 if (nb_namespaces != 0) {
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
664 node->namespace_map = g_hash_table_new_full(
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
665 g_str_hash, g_str_equal, g_free, g_free);
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
666
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
667 for (i = 0, j = 0; i < nb_namespaces; i++, j += 2) {
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
668 const char *key = (const char *)namespaces[j];
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
669 const char *val = (const char *)namespaces[j + 1];
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
670 g_hash_table_insert(node->namespace_map,
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
671 g_strdup(key ? key : ""), g_strdup(val ? val : ""));
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
672 }
2ca06ee152ac make our xmlnode preserve prefixes
Ka-Hing Cheung <khc@pidgin.im>
parents: 20228
diff changeset
673 }
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
674
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
675 for(i=0; i < nb_attributes * 5; i+=5) {
26393
7420fd99903a Add xmlnode_set_attrib_full that enables you to set an attribute with both
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
676 const char *name = (const char *)attributes[i];
7420fd99903a Add xmlnode_set_attrib_full that enables you to set an attribute with both
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25911
diff changeset
677 const char *prefix = (const char *)attributes[i+1];
14290
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14254
diff changeset
678 char *txt;
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
679 int attrib_len = attributes[i+4] - attributes[i+3];
29069
37d99401e2f6 Fix this warning:
Mark Doliner <markdoliner@pidgin.im>
parents: 29057
diff changeset
680 char *attrib = g_strndup((const char *)attributes[i+3], attrib_len);
14290
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14254
diff changeset
681 txt = attrib;
29328
cf4435714f5f Correctly parse "&lt;br&gt;" in an XML attribute. Closes #11318.
Paul Aurich <darkrain42@pidgin.im>
parents: 29069
diff changeset
682 attrib = purple_unescape_text(txt);
14233
4f5fe687b21d [gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14097
diff changeset
683 g_free(txt);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
684 purple_xmlnode_set_attrib_full(node, name, NULL, prefix, attrib);
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
685 g_free(attrib);
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
686 }
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
687
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
688 xpd->current = node;
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
689 }
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
690 }
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
691
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
692 static void
41960
c8a4853205e3 Bump C standard to C99 for libpurple files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41685
diff changeset
693 purple_xmlnode_parser_element_end_libxml(gpointer user_data,
c8a4853205e3 Bump C standard to C99 for libpurple files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41685
diff changeset
694 const xmlChar *element_name,
c8a4853205e3 Bump C standard to C99 for libpurple files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41685
diff changeset
695 G_GNUC_UNUSED const xmlChar *prefix,
c8a4853205e3 Bump C standard to C99 for libpurple files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41685
diff changeset
696 G_GNUC_UNUSED const xmlChar *xmlns)
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
697 {
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
698 struct _xmlnode_parser_data *xpd = user_data;
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
699
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
700 if(!element_name || !xpd->current || xpd->error) {
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
701 return;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
702 }
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
703
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
704 if(xpd->current->parent) {
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
705 if(!xmlStrcmp((xmlChar*) xpd->current->name, element_name)) {
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
706 xpd->current = xpd->current->parent;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
707 }
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
708 }
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
709 }
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
710
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
711 static void
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
712 purple_xmlnode_parser_element_text_libxml(void *user_data, const xmlChar *text, int text_len)
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
713 {
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
714 struct _xmlnode_parser_data *xpd = user_data;
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
715
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
716 if(!xpd->current || xpd->error) {
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
717 return;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
718 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
719
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
720 if(!text || !text_len) {
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
721 return;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
722 }
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
723
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
724 purple_xmlnode_insert_data(xpd->current, (const char*) text, text_len);
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
725 }
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
726
15412
def58941bcb9 [gaim-migrate @ 18143]
Sean Egan <seanegan@pidgin.im>
parents: 15277
diff changeset
727 static void
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
728 purple_xmlnode_parser_error_libxml(void *user_data, const char *msg, ...)
15412
def58941bcb9 [gaim-migrate @ 18143]
Sean Egan <seanegan@pidgin.im>
parents: 15277
diff changeset
729 {
def58941bcb9 [gaim-migrate @ 18143]
Sean Egan <seanegan@pidgin.im>
parents: 15277
diff changeset
730 struct _xmlnode_parser_data *xpd = user_data;
19821
c044ef20e299 Print an error when there was a problem parsing some XML
Mark Doliner <markdoliner@pidgin.im>
parents: 19568
diff changeset
731 char errmsg[2048];
c044ef20e299 Print an error when there was a problem parsing some XML
Mark Doliner <markdoliner@pidgin.im>
parents: 19568
diff changeset
732 va_list args;
c044ef20e299 Print an error when there was a problem parsing some XML
Mark Doliner <markdoliner@pidgin.im>
parents: 19568
diff changeset
733
15412
def58941bcb9 [gaim-migrate @ 18143]
Sean Egan <seanegan@pidgin.im>
parents: 15277
diff changeset
734 xpd->error = TRUE;
19821
c044ef20e299 Print an error when there was a problem parsing some XML
Mark Doliner <markdoliner@pidgin.im>
parents: 19568
diff changeset
735
c044ef20e299 Print an error when there was a problem parsing some XML
Mark Doliner <markdoliner@pidgin.im>
parents: 19568
diff changeset
736 va_start(args, msg);
40094
8e6d91e4dd8f Use g_(v)snprintf so we need less wrappers.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39918
diff changeset
737 g_vsnprintf(errmsg, sizeof(errmsg), msg, args);
19821
c044ef20e299 Print an error when there was a problem parsing some XML
Mark Doliner <markdoliner@pidgin.im>
parents: 19568
diff changeset
738 va_end(args);
c044ef20e299 Print an error when there was a problem parsing some XML
Mark Doliner <markdoliner@pidgin.im>
parents: 19568
diff changeset
739
25301
d81daadd1bee Error messages from libxml contain their own newlines
Mark Doliner <markdoliner@pidgin.im>
parents: 24639
diff changeset
740 purple_debug_error("xmlnode", "Error parsing xml file: %s", errmsg);
15412
def58941bcb9 [gaim-migrate @ 18143]
Sean Egan <seanegan@pidgin.im>
parents: 15277
diff changeset
741 }
def58941bcb9 [gaim-migrate @ 18143]
Sean Egan <seanegan@pidgin.im>
parents: 15277
diff changeset
742
25726
19e0c9302a43 *** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <darkrain42@pidgin.im>
parents: 25559
diff changeset
743 static void
42633
1bd209125a00 Explicitly cast libxml error handler function in xmlnode
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
744 purple_xmlnode_parser_structural_error_libxml(void *user_data, const xmlErrorPtr error)
25726
19e0c9302a43 *** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <darkrain42@pidgin.im>
parents: 25559
diff changeset
745 {
19e0c9302a43 *** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <darkrain42@pidgin.im>
parents: 25559
diff changeset
746 struct _xmlnode_parser_data *xpd = user_data;
19e0c9302a43 *** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <darkrain42@pidgin.im>
parents: 25559
diff changeset
747
19e0c9302a43 *** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <darkrain42@pidgin.im>
parents: 25559
diff changeset
748 if (error && (error->level == XML_ERR_ERROR ||
19e0c9302a43 *** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <darkrain42@pidgin.im>
parents: 25559
diff changeset
749 error->level == XML_ERR_FATAL)) {
19e0c9302a43 *** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <darkrain42@pidgin.im>
parents: 25559
diff changeset
750 xpd->error = TRUE;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
751 purple_debug_error("xmlnode", "XML parser error for PurpleXmlNode %p: "
25726
19e0c9302a43 *** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <darkrain42@pidgin.im>
parents: 25559
diff changeset
752 "Domain %i, code %i, level %i: %s",
19e0c9302a43 *** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <darkrain42@pidgin.im>
parents: 25559
diff changeset
753 user_data, error->domain, error->code, error->level,
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
754 error->message ? error->message : "(null)");
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
755 } else if (error) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
756 purple_debug_warning("xmlnode", "XML parser error for PurpleXmlNode %p: "
25726
19e0c9302a43 *** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <darkrain42@pidgin.im>
parents: 25559
diff changeset
757 "Domain %i, code %i, level %i: %s",
19e0c9302a43 *** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <darkrain42@pidgin.im>
parents: 25559
diff changeset
758 user_data, error->domain, error->code, error->level,
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
759 error->message ? error->message : "(null)");
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
760 } else {
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
761 purple_debug_warning("xmlnode", "XML parser error for PurpleXmlNode %p",
25726
19e0c9302a43 *** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <darkrain42@pidgin.im>
parents: 25559
diff changeset
762 user_data);
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
763 }
25726
19e0c9302a43 *** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <darkrain42@pidgin.im>
parents: 25559
diff changeset
764 }
19e0c9302a43 *** Plucked rev d34a1589 (darkrain42@pidgin.im):
Paul Aurich <darkrain42@pidgin.im>
parents: 25559
diff changeset
765
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
766 static xmlSAXHandler purple_xmlnode_parser_libxml = {
17550
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
767 NULL, /* internalSubset */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
768 NULL, /* isStandalone */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
769 NULL, /* hasInternalSubset */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
770 NULL, /* hasExternalSubset */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
771 NULL, /* resolveEntity */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
772 NULL, /* getEntity */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
773 NULL, /* entityDecl */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
774 NULL, /* notationDecl */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
775 NULL, /* attributeDecl */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
776 NULL, /* elementDecl */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
777 NULL, /* unparsedEntityDecl */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
778 NULL, /* setDocumentLocator */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
779 NULL, /* startDocument */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
780 NULL, /* endDocument */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
781 NULL, /* startElement */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
782 NULL, /* endElement */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
783 NULL, /* reference */
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
784 purple_xmlnode_parser_element_text_libxml, /* characters */
17550
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
785 NULL, /* ignorableWhitespace */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
786 NULL, /* processingInstruction */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
787 NULL, /* comment */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
788 NULL, /* warning */
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
789 purple_xmlnode_parser_error_libxml, /* error */
17550
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
790 NULL, /* fatalError */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
791 NULL, /* getParameterEntity */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
792 NULL, /* cdataBlock */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
793 NULL, /* externalSubset */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
794 XML_SAX2_MAGIC, /* initialized */
d67724d3a606 Kill a C99 struct initialization.
Richard Laager <rlaager@pidgin.im>
parents: 15979
diff changeset
795 NULL, /* _private */
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
796 purple_xmlnode_parser_element_start_libxml, /* startElementNs */
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
797 purple_xmlnode_parser_element_end_libxml, /* endElementNs */
42633
1bd209125a00 Explicitly cast libxml error handler function in xmlnode
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
798 (xmlStructuredErrorFunc)purple_xmlnode_parser_structural_error_libxml, /* serror */
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
799 };
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
800
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
801 PurpleXmlNode *
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
802 purple_xmlnode_from_str(const char *str, gssize size)
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
803 {
11390
6cc6ea4e45e3 [gaim-migrate @ 13618]
Nathan Walp <nwalp@pidgin.im>
parents: 10848
diff changeset
804 struct _xmlnode_parser_data *xpd;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
805 PurpleXmlNode *ret;
11390
6cc6ea4e45e3 [gaim-migrate @ 13618]
Nathan Walp <nwalp@pidgin.im>
parents: 10848
diff changeset
806 gsize real_size;
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
807
11390
6cc6ea4e45e3 [gaim-migrate @ 13618]
Nathan Walp <nwalp@pidgin.im>
parents: 10848
diff changeset
808 g_return_val_if_fail(str != NULL, NULL);
6cc6ea4e45e3 [gaim-migrate @ 13618]
Nathan Walp <nwalp@pidgin.im>
parents: 10848
diff changeset
809
36256
a437550a9308 Remove -Wno-sign-compare and backport fixes from default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 36025
diff changeset
810 real_size = size < 0 ? strlen(str) : (gsize)size;
11390
6cc6ea4e45e3 [gaim-migrate @ 13618]
Nathan Walp <nwalp@pidgin.im>
parents: 10848
diff changeset
811 xpd = g_new0(struct _xmlnode_parser_data, 1);
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
812
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
813 if (xmlSAXUserParseMemory(&purple_xmlnode_parser_libxml, xpd, str, real_size) < 0) {
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
814 while(xpd->current && xpd->current->parent) {
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
815 xpd->current = xpd->current->parent;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
816 }
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
817 g_clear_pointer(&xpd->current, purple_xmlnode_free);
13808
411ee56da344 [gaim-migrate @ 16229]
Sean Egan <seanegan@pidgin.im>
parents: 12233
diff changeset
818 }
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
819 ret = xpd->current;
15412
def58941bcb9 [gaim-migrate @ 18143]
Sean Egan <seanegan@pidgin.im>
parents: 15277
diff changeset
820 if (xpd->error) {
def58941bcb9 [gaim-migrate @ 18143]
Sean Egan <seanegan@pidgin.im>
parents: 15277
diff changeset
821 ret = NULL;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
822 g_clear_pointer(&xpd->current, purple_xmlnode_free);
15412
def58941bcb9 [gaim-migrate @ 18143]
Sean Egan <seanegan@pidgin.im>
parents: 15277
diff changeset
823 }
def58941bcb9 [gaim-migrate @ 18143]
Sean Egan <seanegan@pidgin.im>
parents: 15277
diff changeset
824
7131
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
825 g_free(xpd);
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
826 return ret;
bde45b2e6bf3 [gaim-migrate @ 7698]
Nathan Walp <nwalp@pidgin.im>
parents:
diff changeset
827 }
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
828
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
829 PurpleXmlNode *
42831
a4b028c0f605 Use PurpleNotification where appropriate
Gary Kramlich <grim@reaperworld.com>
parents: 42767
diff changeset
830 purple_xmlnode_from_file(const char *dir, const char *filename,
a4b028c0f605 Use PurpleNotification where appropriate
Gary Kramlich <grim@reaperworld.com>
parents: 42767
diff changeset
831 G_GNUC_UNUSED const char *description,
a4b028c0f605 Use PurpleNotification where appropriate
Gary Kramlich <grim@reaperworld.com>
parents: 42767
diff changeset
832 const char *process)
23964
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
833 {
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
834 gchar *filename_full;
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
835 GError *error = NULL;
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
836 gchar *contents = NULL;
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
837 gsize length;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
838 PurpleXmlNode *node = NULL;
23964
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
839
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
840 g_return_val_if_fail(dir != NULL, NULL);
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
841
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
842 purple_debug_misc(process, "Reading file %s from directory %s",
23964
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
843 filename, dir);
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
844
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
845 filename_full = g_build_filename(dir, filename, NULL);
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
846
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
847 if (!g_file_test(filename_full, G_FILE_TEST_EXISTS)) {
23964
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
848 purple_debug_info(process, "File %s does not exist (this is not "
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
849 "necessarily an error)", filename_full);
23964
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
850 g_free(filename_full);
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
851 return NULL;
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
852 }
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
853
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
854 if (!g_file_get_contents(filename_full, &contents, &length, &error)) {
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
855 purple_debug_error(process, "Error reading file %s: %s",
23964
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
856 filename_full, error->message);
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
857 g_error_free(error);
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
858 }
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
859
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
860 if ((contents != NULL) && (length > 0)) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
861 node = purple_xmlnode_from_str(contents, length);
23964
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
862
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
863 /* If we were unable to parse the file then save its contents to a backup file */
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
864 if (node == NULL) {
23964
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
865 gchar *filename_temp, *filename_temp_full;
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
866
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
867 filename_temp = g_strdup_printf("%s~", filename);
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
868 filename_temp_full = g_build_filename(dir, filename_temp, NULL);
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
869
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
870 purple_debug_error("util", "Error parsing file %s. Renaming old "
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
871 "file to %s", filename_full, filename_temp);
40650
94e777c03e4a Deprecate purple_util_write_data_to_file_absolute and use g_file_set_contents in place of it
Gary Kramlich <grim@reaperworld.com>
parents: 40564
diff changeset
872 g_file_set_contents(filename_temp_full, contents, length, NULL);
23964
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
873
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
874 g_free(filename_temp_full);
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
875 g_free(filename_temp);
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
876 }
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
877
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
878 g_free(contents);
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
879 }
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
880
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
881 /* If we could not parse the file then show the user an error message */
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
882 if (node == NULL) {
42831
a4b028c0f605 Use PurpleNotification where appropriate
Gary Kramlich <grim@reaperworld.com>
parents: 42767
diff changeset
883 g_warning("failed to read %s", filename);
23964
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
884 }
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
885
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
886 g_free(filename_full);
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
887
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
888 return node;
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
889 }
342e3f5bedd9 partially working status icon theme stuff
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents: 23962
diff changeset
890
23821
283d616f7f29 Make sure xmlnode_copy also copies the prefix and namespace_map from
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22083
diff changeset
891 static void
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
892 purple_xmlnode_copy_foreach_ns(gpointer key, gpointer value, gpointer user_data)
23821
283d616f7f29 Make sure xmlnode_copy also copies the prefix and namespace_map from
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22083
diff changeset
893 {
283d616f7f29 Make sure xmlnode_copy also copies the prefix and namespace_map from
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22083
diff changeset
894 GHashTable *ret = (GHashTable *)user_data;
283d616f7f29 Make sure xmlnode_copy also copies the prefix and namespace_map from
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22083
diff changeset
895 g_hash_table_insert(ret, g_strdup(key), g_strdup(value));
283d616f7f29 Make sure xmlnode_copy also copies the prefix and namespace_map from
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22083
diff changeset
896 }
283d616f7f29 Make sure xmlnode_copy also copies the prefix and namespace_map from
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22083
diff changeset
897
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
898 PurpleXmlNode *
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
899 purple_xmlnode_copy(const PurpleXmlNode *src)
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
900 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
901 PurpleXmlNode *ret;
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
902 PurpleXmlNode *child;
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
903 PurpleXmlNode *sibling = NULL;
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
904
12233
0570720fee6c [gaim-migrate @ 14535]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12198
diff changeset
905 g_return_val_if_fail(src != NULL, NULL);
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
906
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
907 ret = new_node(src->name, src->type);
17825
ced38a45f560 Fixed a bug in xmlnode_copy, it didn't preserve the namespace in the copy.
Andreas Monitzer <am@adiumx.com>
parents: 15979
diff changeset
908 ret->xmlns = g_strdup(src->xmlns);
23821
283d616f7f29 Make sure xmlnode_copy also copies the prefix and namespace_map from
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22083
diff changeset
909 if (src->data) {
283d616f7f29 Make sure xmlnode_copy also copies the prefix and namespace_map from
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22083
diff changeset
910 if (src->data_sz) {
40756
3a58ef28ee44 Implement mitigation for GHSL-2021-045
Gary Kramlich <grim@reaperworld.com>
parents: 40650
diff changeset
911 ret->data = g_memdup2(src->data, src->data_sz);
8167
deae0da446a9 [gaim-migrate @ 8880]
Nathan Walp <nwalp@pidgin.im>
parents: 8135
diff changeset
912 ret->data_sz = src->data_sz;
deae0da446a9 [gaim-migrate @ 8880]
Nathan Walp <nwalp@pidgin.im>
parents: 8135
diff changeset
913 } else {
deae0da446a9 [gaim-migrate @ 8880]
Nathan Walp <nwalp@pidgin.im>
parents: 8135
diff changeset
914 ret->data = g_strdup(src->data);
deae0da446a9 [gaim-migrate @ 8880]
Nathan Walp <nwalp@pidgin.im>
parents: 8135
diff changeset
915 }
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
916 }
23821
283d616f7f29 Make sure xmlnode_copy also copies the prefix and namespace_map from
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22083
diff changeset
917 ret->prefix = g_strdup(src->prefix);
283d616f7f29 Make sure xmlnode_copy also copies the prefix and namespace_map from
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22083
diff changeset
918 if (src->namespace_map) {
283d616f7f29 Make sure xmlnode_copy also copies the prefix and namespace_map from
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22083
diff changeset
919 ret->namespace_map = g_hash_table_new_full(g_str_hash, g_str_equal,
283d616f7f29 Make sure xmlnode_copy also copies the prefix and namespace_map from
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22083
diff changeset
920 g_free, g_free);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
921 g_hash_table_foreach(src->namespace_map, purple_xmlnode_copy_foreach_ns, ret->namespace_map);
23821
283d616f7f29 Make sure xmlnode_copy also copies the prefix and namespace_map from
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22083
diff changeset
922 }
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
923
23821
283d616f7f29 Make sure xmlnode_copy also copies the prefix and namespace_map from
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22083
diff changeset
924 for (child = src->child; child; child = child->next) {
283d616f7f29 Make sure xmlnode_copy also copies the prefix and namespace_map from
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22083
diff changeset
925 if (sibling) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
926 sibling->next = purple_xmlnode_copy(child);
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
927 sibling = sibling->next;
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
928 } else {
36031
9eb8f52893d0 Merge release-2.x.y
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 36002 36025
diff changeset
929 ret->child = sibling = purple_xmlnode_copy(child);
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
930 }
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
931 sibling->parent = ret;
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
932 }
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
933
12233
0570720fee6c [gaim-migrate @ 14535]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12198
diff changeset
934 ret->lastchild = sibling;
0570720fee6c [gaim-migrate @ 14535]
Michael Carlson <corfe83@users.sourceforge.net>
parents: 12198
diff changeset
935
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
936 return ret;
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
937 }
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
938
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
939 PurpleXmlNode *
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
940 purple_xmlnode_get_next_twin(PurpleXmlNode *node)
10423
4663a8238def [gaim-migrate @ 11675]
Mark Doliner <markdoliner@pidgin.im>
parents: 10415
diff changeset
941 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
942 PurpleXmlNode *sibling;
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
943 const char *ns = purple_xmlnode_get_namespace(node);
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
944
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
945 g_return_val_if_fail(node != NULL, NULL);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
946 g_return_val_if_fail(node->type == PURPLE_XMLNODE_TYPE_TAG, NULL);
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
947
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
948 for(sibling = node->next; sibling; sibling = sibling->next) {
20224
d4b827c606db applied changes from 4d50bf3b08569aa2108a9f5da47fb1548d0c7dd9
Luke Schierer <lschiere@pidgin.im>
parents: 20147
diff changeset
949 /* XXX: Is it correct to ignore the namespace for the match if none was specified? */
8283
407f6ed6715d [gaim-migrate @ 9007]
Daniel Atallah <datallah@pidgin.im>
parents: 8262
diff changeset
950 const char *xmlns = NULL;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
951 if(ns) {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
952 xmlns = purple_xmlnode_get_namespace(sibling);
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
953 }
8262
fa907a654af9 [gaim-migrate @ 8985]
Nathan Walp <nwalp@pidgin.im>
parents: 8167
diff changeset
954
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
955 if(sibling->type == PURPLE_XMLNODE_TYPE_TAG && purple_strequal(node->name, sibling->name) &&
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
956 purple_strequal(ns, xmlns)) {
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
957 return sibling;
41647
63c65c9fbb34 Small cleanups to xmlnode
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
958 }
8135
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
959 }
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
960
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
961 return NULL;
d4df7d1821a5 [gaim-migrate @ 8840]
Nathan Walp <nwalp@pidgin.im>
parents: 8046
diff changeset
962 }
34791
df49377a0778 Added GBoxed wrapping to xmlnode
Ankit Vani <a@nevitus.org>
parents: 32322
diff changeset
963
df49377a0778 Added GBoxed wrapping to xmlnode
Ankit Vani <a@nevitus.org>
parents: 32322
diff changeset
964 GType
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
965 purple_xmlnode_get_type(void)
34791
df49377a0778 Added GBoxed wrapping to xmlnode
Ankit Vani <a@nevitus.org>
parents: 32322
diff changeset
966 {
df49377a0778 Added GBoxed wrapping to xmlnode
Ankit Vani <a@nevitus.org>
parents: 32322
diff changeset
967 static GType type = 0;
df49377a0778 Added GBoxed wrapping to xmlnode
Ankit Vani <a@nevitus.org>
parents: 32322
diff changeset
968
df49377a0778 Added GBoxed wrapping to xmlnode
Ankit Vani <a@nevitus.org>
parents: 32322
diff changeset
969 if (type == 0) {
34970
e3b24d73b775 Fixed type name for PurpleXmlNode
Ankit Vani <a@nevitus.org>
parents: 34955
diff changeset
970 type = g_boxed_type_register_static("PurpleXmlNode",
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
971 (GBoxedCopyFunc)purple_xmlnode_copy,
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 34889
diff changeset
972 (GBoxedFreeFunc)purple_xmlnode_free);
34791
df49377a0778 Added GBoxed wrapping to xmlnode
Ankit Vani <a@nevitus.org>
parents: 32322
diff changeset
973 }
df49377a0778 Added GBoxed wrapping to xmlnode
Ankit Vani <a@nevitus.org>
parents: 32322
diff changeset
974
df49377a0778 Added GBoxed wrapping to xmlnode
Ankit Vani <a@nevitus.org>
parents: 32322
diff changeset
975 return type;
df49377a0778 Added GBoxed wrapping to xmlnode
Ankit Vani <a@nevitus.org>
parents: 32322
diff changeset
976 }

mercurial