Mercurial > pidgin
comparison libpurple/xmlnode.c @ 25126:78b43f9c741b
propagate from branch 'im.pidgin.pidgin' (head 038d9d36d640ed83f9df5333d57dc0cd8b9ae847)
to branch 'im.pidgin.soc.2008.themes' (head b49d95f44169eb347061907f1842d56d9c3c826c)
author | Gary Kramlich <grim@reaperworld.com> |
---|---|
date | Thu, 21 Aug 2008 03:44:57 +0000 |
parents | 2d419a0fc0e4 |
children | 9525fb966efb |
comparison
equal
deleted
inserted
replaced
23944:7cb7bc8865af | 25126:78b43f9c741b |
---|---|
726 | 726 |
727 g_free(xpd); | 727 g_free(xpd); |
728 return ret; | 728 return ret; |
729 } | 729 } |
730 | 730 |
731 xmlnode * | |
732 xmlnode_from_file(const char *dir, const char *filename, const char *description, const char *process) | |
733 { | |
734 gchar *filename_full; | |
735 GError *error = NULL; | |
736 gchar *contents = NULL; | |
737 gsize length; | |
738 xmlnode *node = NULL; | |
739 | |
740 g_return_val_if_fail(dir != NULL, NULL); | |
741 | |
742 purple_debug_info(process, "Reading file %s from directory %s\n", | |
743 filename, dir); | |
744 | |
745 filename_full = g_build_filename(dir, filename, NULL); | |
746 | |
747 if (!g_file_test(filename_full, G_FILE_TEST_EXISTS)) | |
748 { | |
749 purple_debug_info(process, "File %s does not exist (this is not " | |
750 "necessarily an error)\n", filename_full); | |
751 g_free(filename_full); | |
752 return NULL; | |
753 } | |
754 | |
755 if (!g_file_get_contents(filename_full, &contents, &length, &error)) | |
756 { | |
757 purple_debug_error(process, "Error reading file %s: %s\n", | |
758 filename_full, error->message); | |
759 g_error_free(error); | |
760 } | |
761 | |
762 if ((contents != NULL) && (length > 0)) | |
763 { | |
764 node = xmlnode_from_str(contents, length); | |
765 | |
766 /* If we were unable to parse the file then save its contents to a backup file */ | |
767 if (node == NULL) | |
768 { | |
769 gchar *filename_temp, *filename_temp_full; | |
770 | |
771 filename_temp = g_strdup_printf("%s~", filename); | |
772 filename_temp_full = g_build_filename(dir, filename_temp, NULL); | |
773 | |
774 purple_debug_error("util", "Error parsing file %s. Renaming old " | |
775 "file to %s\n", filename_full, filename_temp); | |
776 purple_util_write_data_to_file_absolute(filename_temp_full, contents, length); | |
777 | |
778 g_free(filename_temp_full); | |
779 g_free(filename_temp); | |
780 } | |
781 | |
782 g_free(contents); | |
783 } | |
784 | |
785 /* If we could not parse the file then show the user an error message */ | |
786 if (node == NULL) | |
787 { | |
788 gchar *title, *msg; | |
789 title = g_strdup_printf(_("Error Reading %s"), filename); | |
790 msg = g_strdup_printf(_("An error was encountered reading your " | |
791 "%s. The file has not been loaded, and the old file " | |
792 "has been renamed to %s~."), description, filename_full); | |
793 purple_notify_error(NULL, NULL, title, msg); | |
794 g_free(title); | |
795 g_free(msg); | |
796 } | |
797 | |
798 g_free(filename_full); | |
799 | |
800 return node; | |
801 } | |
802 | |
731 static void | 803 static void |
732 xmlnode_copy_foreach_ns(gpointer key, gpointer value, gpointer user_data) | 804 xmlnode_copy_foreach_ns(gpointer key, gpointer value, gpointer user_data) |
733 { | 805 { |
734 GHashTable *ret = (GHashTable *)user_data; | 806 GHashTable *ret = (GHashTable *)user_data; |
735 g_hash_table_insert(ret, g_strdup(key), g_strdup(value)); | 807 g_hash_table_insert(ret, g_strdup(key), g_strdup(value)); |