libpurple/protocols/gg/xml.c

branch
soc.2012.gg
changeset 33314
57013b9e1a8e
child 33315
42bbe5b85df8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/gg/xml.c	Mon Jul 09 21:21:21 2012 +0200
@@ -0,0 +1,58 @@
+#include "xml.h"
+
+gboolean ggp_xml_get_string(const xmlnode *xml, gchar *childName, gchar **var)
+{
+	char *str;
+	
+	g_return_val_if_fail(xml != NULL, FALSE);
+	g_return_val_if_fail(var != NULL, FALSE);
+	
+	if (childName != NULL)
+	{
+		xml = xmlnode_get_child(xml, childName);
+		g_return_val_if_fail(xml != NULL, FALSE);
+	}
+	
+	str = xmlnode_get_data(xml);
+	g_return_val_if_fail(str != NULL, FALSE);
+	
+	*var = str;
+	return TRUE;
+}
+
+gboolean ggp_xml_get_bool(const xmlnode *xml, gchar *childName, gboolean *var)
+{
+	char *str;
+	gboolean succ;
+	
+	succ = ggp_xml_get_string(xml, childName, &str);
+	g_return_val_if_fail(succ, FALSE);
+	
+	*var = (strcmp(str, "true") == 0 ||
+		strcmp(str, "True") == 0 ||
+		strcmp(str, "TRUE") == 0 ||
+		strcmp(str, "1") == 0);
+	g_free(str);
+	
+	return TRUE;
+}
+
+gboolean ggp_xml_get_uint(const xmlnode *xml, gchar *childName, unsigned int *var)
+{
+	char *str, *endptr;
+	gboolean succ;
+	unsigned int val;
+	
+	succ = ggp_xml_get_string(xml, childName, &str);
+	g_return_val_if_fail(succ, FALSE);
+	
+	errno = 0;
+	val = strtoul(str, &endptr, 10);
+	
+	succ = (errno != ERANGE && endptr[0] == '\0');
+	g_free(str);
+	
+	if (succ)
+		*var = val;
+	return succ;
+}

mercurial