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