comparison libpurple/xmlnode.c @ 25374:e22bc87b758b

explicit merge of '9a5e549612efd8ca6f60fc57b51a4eee7e32c861' and 'f398f87ffee8b1b11295a0a0138936074c5dff7a'
author Richard Laager <rlaager@wiktel.com>
date Fri, 02 Jan 2009 22:09:40 +0000
parents 94fa7211eb98
children 43b721aa4b76
comparison
equal deleted inserted replaced
24731:295464ae2d2a 25374:e22bc87b758b
728 728
729 g_free(xpd); 729 g_free(xpd);
730 return ret; 730 return ret;
731 } 731 }
732 732
733 xmlnode *
734 xmlnode_from_file(const char *dir,const char *filename, const char *description, const char *process)
735 {
736 gchar *filename_full;
737 GError *error = NULL;
738 gchar *contents = NULL;
739 gsize length;
740 xmlnode *node = NULL;
741
742 g_return_val_if_fail(dir != NULL, NULL);
743
744 purple_debug_info(process, "Reading file %s from directory %s\n",
745 filename, dir);
746
747 filename_full = g_build_filename(dir, filename, NULL);
748
749 if (!g_file_test(filename_full, G_FILE_TEST_EXISTS))
750 {
751 purple_debug_info(process, "File %s does not exist (this is not "
752 "necessarily an error)\n", filename_full);
753 g_free(filename_full);
754 return NULL;
755 }
756
757 if (!g_file_get_contents(filename_full, &contents, &length, &error))
758 {
759 purple_debug_error(process, "Error reading file %s: %s\n",
760 filename_full, error->message);
761 g_error_free(error);
762 }
763
764 if ((contents != NULL) && (length > 0))
765 {
766 node = xmlnode_from_str(contents, length);
767
768 /* If we were unable to parse the file then save its contents to a backup file */
769 if (node == NULL)
770 {
771 gchar *filename_temp, *filename_temp_full;
772
773 filename_temp = g_strdup_printf("%s~", filename);
774 filename_temp_full = g_build_filename(dir, filename_temp, NULL);
775
776 purple_debug_error("util", "Error parsing file %s. Renaming old "
777 "file to %s\n", filename_full, filename_temp);
778 purple_util_write_data_to_file_absolute(filename_temp_full, contents, length);
779
780 g_free(filename_temp_full);
781 g_free(filename_temp);
782 }
783
784 g_free(contents);
785 }
786
787 /* If we could not parse the file then show the user an error message */
788 if (node == NULL)
789 {
790 gchar *title, *msg;
791 title = g_strdup_printf(_("Error Reading %s"), filename);
792 msg = g_strdup_printf(_("An error was encountered reading your "
793 "%s. The file has not been loaded, and the old file "
794 "has been renamed to %s~."), description, filename_full);
795 purple_notify_error(NULL, NULL, title, msg);
796 g_free(title);
797 g_free(msg);
798 }
799
800 g_free(filename_full);
801
802 return node;
803 }
804
733 static void 805 static void
734 xmlnode_copy_foreach_ns(gpointer key, gpointer value, gpointer user_data) 806 xmlnode_copy_foreach_ns(gpointer key, gpointer value, gpointer user_data)
735 { 807 {
736 GHashTable *ret = (GHashTable *)user_data; 808 GHashTable *ret = (GHashTable *)user_data;
737 g_hash_table_insert(ret, g_strdup(key), g_strdup(value)); 809 g_hash_table_insert(ret, g_strdup(key), g_strdup(value));