Mercurial > pidgin
comparison libpurple/xmlnode.c @ 25889:e2b193decaa5
explicit merge of '814d53152c168c9c4732b3d084260711d536fba6'
and 'af375020001eed33302b471e7ee9dec6a478e824'
| author | Richard Laager <rlaager@wiktel.com> |
|---|---|
| date | Fri, 02 Jan 2009 22:23:58 +0000 |
| parents | 94fa7211eb98 |
| children | 43b721aa4b76 |
comparison
equal
deleted
inserted
replaced
| 24844:94a47062819c | 25889:e2b193decaa5 |
|---|---|
| 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)); |
