Mercurial > pidgin.yaz
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 {