| 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 { |