diff libpurple/xmlnode.c @ 23692:2ecd716746e6

propagate from branch 'im.pidgin.pidgin' (head c3595d7c3895f52f076aaaa7650f81d8fbea81ef) to branch 'im.pidgin.soc.2008.themes' (head 0ebb2c5ee87ee44da1b02c556a5def7eb8fbda03)
author Gary Kramlich <grim@reaperworld.com>
date Wed, 06 Aug 2008 02:39:40 +0000
parents 774ef2a2e7f8 c4ec724b3b53
children 2d419a0fc0e4
line wrap: on
line diff
--- a/libpurple/xmlnode.c	Fri Aug 01 22:57:11 2008 +0000
+++ b/libpurple/xmlnode.c	Wed Aug 06 02:39:40 2008 +0000
@@ -728,76 +728,11 @@
 	return ret;
 }
 
-xmlnode *
-xmlnode_from_file(const char *dir, const char *filename, const char *description, const char *process)
+static void
+xmlnode_copy_foreach_ns(gpointer key, gpointer value, gpointer user_data)
 {
-	gchar *filename_full;
-	GError *error = NULL;
-	gchar *contents = NULL;
-	gsize length;
-	xmlnode *node = NULL;
-
-	g_return_val_if_fail(dir != NULL, NULL);
-
-	purple_debug_info(process, "Reading file %s from directory %s\n",
-					filename, dir);
-
-	filename_full = g_build_filename(dir, filename, NULL);
-
-	if (!g_file_test(filename_full, G_FILE_TEST_EXISTS))
-	{
-		purple_debug_info(process, "File %s does not exist (this is not "
-						"necessarily an error)\n", filename_full);
-		g_free(filename_full);
-		return NULL;
-	}
-
-	if (!g_file_get_contents(filename_full, &contents, &length, &error))
-	{
-		purple_debug_error(process, "Error reading file %s: %s\n",
-						 filename_full, error->message);
-		g_error_free(error);
-	}
-
-	if ((contents != NULL) && (length > 0))
-	{
-		node = xmlnode_from_str(contents, length);
-
-		/* If we were unable to parse the file then save its contents to a backup file */
-		if (node == NULL)
-		{
-			gchar *filename_temp, *filename_temp_full;
-
-			filename_temp = g_strdup_printf("%s~", filename);
-			filename_temp_full = g_build_filename(dir, filename_temp, NULL);			
-
-			purple_debug_error("util", "Error parsing file %s.  Renaming old "
-							 "file to %s\n", filename_full, filename_temp);
-			purple_util_write_data_to_file_absolute(filename_temp_full, contents, length);
-
-			g_free(filename_temp_full);
-			g_free(filename_temp);
-		}
-
-		g_free(contents);
-	}
-
-	/* If we could not parse the file then show the user an error message */
-	if (node == NULL)
-	{
-		gchar *title, *msg;
-		title = g_strdup_printf(_("Error Reading %s"), filename);
-		msg = g_strdup_printf(_("An error was encountered reading your "
-					"%s.  The file has not been loaded, and the old file "
-					"has been renamed to %s~."), description, filename_full);
-		purple_notify_error(NULL, NULL, title, msg);
-		g_free(title);
-		g_free(msg);
-	}
-
-	g_free(filename_full);
-
-	return node;
+	GHashTable *ret = (GHashTable *)user_data;
+	g_hash_table_insert(ret, g_strdup(key), g_strdup(value));
 }
 
 xmlnode *
@@ -811,17 +746,23 @@
 
 	ret = new_node(src->name, src->type);
 	ret->xmlns = g_strdup(src->xmlns);
-	if(src->data) {
-		if(src->data_sz) {
+	if (src->data) {
+		if (src->data_sz) {
 			ret->data = g_memdup(src->data, src->data_sz);
 			ret->data_sz = src->data_sz;
 		} else {
 			ret->data = g_strdup(src->data);
 		}
 	}
+	ret->prefix = g_strdup(src->prefix);
+	if (src->namespace_map) {
+		ret->namespace_map = g_hash_table_new_full(g_str_hash, g_str_equal,
+		                                           g_free, g_free);
+		g_hash_table_foreach(src->namespace_map, xmlnode_copy_foreach_ns, ret->namespace_map);
+	}
 
-	for(child = src->child; child; child = child->next) {
-		if(sibling) {
+	for (child = src->child; child; child = child->next) {
+		if (sibling) {
 			sibling->next = xmlnode_copy(child);
 			sibling = sibling->next;
 		} else {