libpurple/protocols/gg/xml.c

changeset 35357
389e413e3414
parent 34935
686fa55b0deb
child 35361
efdbd45604f1
equal deleted inserted replaced
35356:3a71df246d07 35357:389e413e3414
32 #include "debug.h" 32 #include "debug.h"
33 33
34 gboolean ggp_xml_get_string(const PurpleXmlNode *xml, gchar *childName, gchar **var) 34 gboolean ggp_xml_get_string(const PurpleXmlNode *xml, gchar *childName, gchar **var)
35 { 35 {
36 char *str; 36 char *str;
37 37
38 g_return_val_if_fail(xml != NULL, FALSE); 38 g_return_val_if_fail(xml != NULL, FALSE);
39 g_return_val_if_fail(var != NULL, FALSE); 39 g_return_val_if_fail(var != NULL, FALSE);
40 40
41 if (childName != NULL) 41 if (childName != NULL)
42 { 42 {
43 xml = purple_xmlnode_get_child(xml, childName); 43 xml = purple_xmlnode_get_child(xml, childName);
44 if (xml == NULL) 44 if (xml == NULL)
45 return FALSE; 45 return FALSE;
46 } 46 }
47 47
48 str = purple_xmlnode_get_data(xml); 48 str = purple_xmlnode_get_data(xml);
49 if (str == NULL) 49 if (str == NULL)
50 return FALSE; 50 return FALSE;
51 51
52 *var = str; 52 *var = str;
53 return TRUE; 53 return TRUE;
54 } 54 }
55 55
56 gboolean ggp_xml_get_bool(const PurpleXmlNode *xml, gchar *childName, gboolean *var) 56 gboolean ggp_xml_get_bool(const PurpleXmlNode *xml, gchar *childName, gboolean *var)
57 { 57 {
58 char *str; 58 char *str;
59 gboolean succ; 59 gboolean succ;
60 60
61 succ = ggp_xml_get_string(xml, childName, &str); 61 succ = ggp_xml_get_string(xml, childName, &str);
62 if (!succ) 62 if (!succ)
63 return FALSE; 63 return FALSE;
64 64
65 *var = (strcmp(str, "true") == 0 || 65 *var = (strcmp(str, "true") == 0 ||
66 strcmp(str, "True") == 0 || 66 strcmp(str, "True") == 0 ||
67 strcmp(str, "TRUE") == 0 || 67 strcmp(str, "TRUE") == 0 ||
68 strcmp(str, "1") == 0); 68 strcmp(str, "1") == 0);
69 g_free(str); 69 g_free(str);
70 70
71 return TRUE; 71 return TRUE;
72 } 72 }
73 73
74 gboolean ggp_xml_get_uint(const PurpleXmlNode *xml, gchar *childName, unsigned int *var) 74 gboolean ggp_xml_get_uint(const PurpleXmlNode *xml, gchar *childName, unsigned int *var)
75 { 75 {
76 char *str, *endptr; 76 char *str, *endptr;
77 gboolean succ; 77 gboolean succ;
78 unsigned int val; 78 unsigned int val;
79 79
80 succ = ggp_xml_get_string(xml, childName, &str); 80 succ = ggp_xml_get_string(xml, childName, &str);
81 if (!succ) 81 if (!succ)
82 return FALSE; 82 return FALSE;
83 83
84 errno = 0; 84 errno = 0;
85 val = strtoul(str, &endptr, 10); 85 val = strtoul(str, &endptr, 10);
86 86
87 succ = (errno != ERANGE && endptr[0] == '\0'); 87 succ = (errno != ERANGE && endptr[0] == '\0');
88 g_free(str); 88 g_free(str);
89 89
90 if (succ) 90 if (succ)
91 *var = val; 91 *var = val;
92 return succ; 92 return succ;
93 } 93 }
94 94
95 gboolean ggp_xml_set_string(PurpleXmlNode *xml, gchar *childName, const gchar *val) 95 gboolean ggp_xml_set_string(PurpleXmlNode *xml, gchar *childName, const gchar *val)
96 { 96 {
97 g_return_val_if_fail(xml != NULL, FALSE); 97 g_return_val_if_fail(xml != NULL, FALSE);
98 g_return_val_if_fail(val != NULL, FALSE); 98 g_return_val_if_fail(val != NULL, FALSE);
99 99
100 if (childName != NULL) 100 if (childName != NULL)
101 { 101 {
102 PurpleXmlNode *child = purple_xmlnode_get_child(xml, childName); 102 PurpleXmlNode *child = purple_xmlnode_get_child(xml, childName);
103 if (child == NULL) 103 if (child == NULL)
104 child = purple_xmlnode_new_child(xml, childName); 104 child = purple_xmlnode_new_child(xml, childName);
105 xml = child; 105 xml = child;
106 } 106 }
107 107
108 ggp_xmlnode_remove_children(xml); 108 ggp_xmlnode_remove_children(xml);
109 purple_xmlnode_insert_data(xml, val, -1); 109 purple_xmlnode_insert_data(xml, val, -1);
110 110
111 return TRUE; 111 return TRUE;
112 } 112 }
113 113
114 gboolean ggp_xml_set_bool(PurpleXmlNode *xml, gchar *childName, gboolean val) 114 gboolean ggp_xml_set_bool(PurpleXmlNode *xml, gchar *childName, gboolean val)
115 { 115 {
137 137
138 unsigned int ggp_xml_child_count(PurpleXmlNode *xml, const gchar *childName) 138 unsigned int ggp_xml_child_count(PurpleXmlNode *xml, const gchar *childName)
139 { 139 {
140 PurpleXmlNode *child; 140 PurpleXmlNode *child;
141 unsigned int count = 0; 141 unsigned int count = 0;
142 142
143 g_return_val_if_fail(xml != NULL, 0); 143 g_return_val_if_fail(xml != NULL, 0);
144 144
145 if (childName) 145 if (childName)
146 { 146 {
147 child = purple_xmlnode_get_child(xml, childName); 147 child = purple_xmlnode_get_child(xml, childName);
148 while (child) 148 while (child)
149 { 149 {
158 { 158 {
159 child = child->next; 159 child = child->next;
160 count++; 160 count++;
161 } 161 }
162 } 162 }
163 163
164 return count; 164 return count;
165 } 165 }

mercurial