--- a/libpurple/core.c Fri Jun 30 16:12:25 2017 +0300
+++ b/libpurple/core.c Fri Jun 30 17:31:16 2017 +0300
@@ -425,3 +425,30 @@
return ops->get_ui_info();
+#define MIGRATE_TO_XDG_DIR(xdg_base_dir, legacy_path) do { \ + gboolean migrate_res; \ + migrate_res = purple_move_to_xdg_base_dir(xdg_base_dir, legacy_path); \ + purple_debug_error("core", "Error migrating %s to %s\n", \ + legacy_path, xdg_base_dir); \ +purple_core_migrate_to_xdg_base_dirs(void) + gboolean xdg_dir_exists; + xdg_dir_exists = g_file_test(purple_data_dir(), G_FILE_TEST_EXISTS); + MIGRATE_TO_XDG_DIR(purple_data_dir(), "certificates"); + MIGRATE_TO_XDG_DIR(purple_cache_dir(), "icons"); + MIGRATE_TO_XDG_DIR(purple_data_dir(), "logs"); + MIGRATE_TO_XDG_DIR(purple_data_dir(), "pounces.xml"); --- a/libpurple/core.h Fri Jun 30 16:12:25 2017 +0300
+++ b/libpurple/core.h Fri Jun 30 17:31:16 2017 +0300
@@ -226,6 +226,19 @@
GHashTable* purple_core_get_ui_info(void);
+ * purple_core_migrate_to_xdg_base_dirs: + * Migrates from legacy directory for libpurple to location following + * XDG base dir spec. https://developer.pidgin.im/ticket/10029 + * NOTE This is not finished yet. Need to decide where other profile files + * Returns: TRUE if migrated successfully, FALSE otherwise. On failure, + * the application must display an error to the user and then exit. +gboolean purple_core_migrate_to_xdg_base_dirs(void); #endif /* _PURPLE_CORE_H_ */
--- a/libpurple/util.c Fri Jun 30 16:12:25 2017 +0300
+++ b/libpurple/util.c Fri Jun 30 17:31:16 2017 +0300
@@ -48,27 +48,6 @@
static JsonNode *escape_js_node = NULL;
static JsonGenerator *escape_js_gen = NULL;
-/* If legacy directory for libpurple exists, move it to location following
- * xdg base dir spec. https://developer.pidgin.im/ticket/10029
-migrate_to_xdg_base_dirs(void)
- const char *legacy_purple_dir;
- legacy_purple_dir = purple_user_dir();
- dir_exists = g_file_test(legacy_purple_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR);
- purple_move_to_xdg_base_dir(purple_data_dir(), "certificates");
- purple_move_to_xdg_base_dir(purple_cache_dir(), "icons");
- purple_move_to_xdg_base_dir(purple_data_dir(), "logs");
- purple_move_to_xdg_base_dir(purple_data_dir(), "pounces.xml");
purple_menu_action_new(const char *label, PurpleCallback callback, gpointer data,
@@ -168,8 +147,6 @@
escape_js_node = json_node_new(JSON_NODE_VALUE);
escape_js_gen = json_generator_new();
json_node_set_boolean(escape_js_node, FALSE);
- migrate_to_xdg_base_dirs();
@@ -2991,45 +2968,49 @@
return purple_xdg_dir(&data_dir, g_get_user_data_dir(), "data");
purple_move_to_xdg_base_dir(const char *purple_xdg_dir, char *path)
gboolean xdg_path_exists;
- /* Check if destination dir exists, otherwise create it */
- xdg_path_exists = g_file_test(purple_xdg_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR);
- if (!xdg_path_exists) {
- mkdir_res = purple_build_dir(purple_xdg_dir, S_IRWXU);
- purple_debug_error("util", "Error creating xdg directory %s: %s; failed migration\n",
- purple_xdg_dir, g_strerror(errno));
+ /* Create destination directory */ + mkdir_res = purple_build_dir(purple_xdg_dir, S_IRWXU); + purple_debug_error("util", "Error creating xdg directory %s: %s; failed migration\n", + purple_xdg_dir, g_strerror(errno)); xdg_path = g_build_filename(purple_xdg_dir, path, NULL);
xdg_path_exists = g_file_test(xdg_path, G_FILE_TEST_EXISTS);
gboolean old_path_exists;
old_path = g_build_filename(purple_user_dir(), path, NULL);
old_path_exists = g_file_test(old_path, G_FILE_TEST_EXISTS);
- g_rename(old_path, xdg_path);
+ rename_res = g_rename(old_path, xdg_path); + if (rename_res == -1) { + purple_debug_error("util", "Error renaming %s to %s; failed migration\n",
void purple_util_set_user_dir(const char *dir)
--- a/libpurple/util.h Fri Jun 30 16:12:25 2017 +0300
+++ b/libpurple/util.h Fri Jun 30 17:31:16 2017 +0300
@@ -834,8 +834,10 @@
* Moves file or directory from legacy user dir to XDG
+ * Returns: TRUE if moved successfully, FALSE otherwise
purple_move_to_xdg_base_dir(const char *purple_xdg_dir, char *path);