From 77f3f2b068950aebe5818aa2e00164896bf3775b Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Thu, 7 Mar 2013 13:21:12 +0100 Subject: [backup-restore] Dir separator removal breaks DConf settings restore DConf load command requires a slash at the end of the path to load, but the replace_variables() code always removed the trailing slash, which made the configuration load nonfunctional. --- modules/backup-restore/evolution-backup-tool.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'modules/backup-restore') diff --git a/modules/backup-restore/evolution-backup-tool.c b/modules/backup-restore/evolution-backup-tool.c index 7c8fc72273..10522c5f09 100644 --- a/modules/backup-restore/evolution-backup-tool.c +++ b/modules/backup-restore/evolution-backup-tool.c @@ -156,7 +156,8 @@ strip_home_dir (const gchar *dir) } static GString * -replace_variables (const gchar *str) +replace_variables (const gchar *str, + gboolean remove_dir_sep) { GString *res = NULL, *use; const gchar *strip_datadir, *strip_configdir; @@ -185,9 +186,11 @@ replace_variables (const gchar *str) g_return_val_if_fail (res != NULL, NULL); - /* remove trailing dir separator */ - while (res->len > 0 && res->str[res->len - 1] == G_DIR_SEPARATOR) { - g_string_truncate (res, res->len - 1); + if (remove_dir_sep) { + /* remove trailing dir separator */ + while (res->len > 0 && res->str[res->len - 1] == G_DIR_SEPARATOR) { + g_string_truncate (res, res->len - 1); + } } return res; @@ -208,7 +211,7 @@ replace_in_file (const gchar *filename, g_return_if_fail (replace != NULL); if (strstr (filename, "$")) { - filenamestr = replace_variables (filename); + filenamestr = replace_variables (filename, TRUE); if (!filenamestr) { g_warning ( @@ -258,7 +261,7 @@ run_cmd (const gchar *cmd) if (strstr (cmd, "$") != NULL) { /* read the doc for g_get_home_dir to know why replacing it here */ - GString *str = replace_variables (cmd); + GString *str = replace_variables (cmd, FALSE); if (str) { print_and_run (str->str); @@ -280,14 +283,15 @@ write_dir_file (void) GString *content, *filename; GError *error = NULL; - filename = replace_variables ("$HOME/" EVOLUTION_DIR_FILE); + filename = replace_variables ("$HOME/" EVOLUTION_DIR_FILE, TRUE); g_return_if_fail (filename != NULL); content = replace_variables ( "[" KEY_FILE_GROUP "]\n" "Version=" VERSION "\n" "UserDataDir=$STRIPDATADIR\n" - "UserConfigDir=$STRIPCONFIGDIR\n"); + "UserConfigDir=$STRIPCONFIGDIR\n" + , TRUE); g_return_if_fail (content != NULL); g_file_set_contents (filename->str, content->str, content->len, &error); @@ -453,7 +457,7 @@ get_source_manager_reload_command (void) GString *tmp; gchar *command; - tmp = replace_variables (DBUS_SOURCE_REGISTRY_SERVICE_FILE); + tmp = replace_variables (DBUS_SOURCE_REGISTRY_SERVICE_FILE, TRUE); if (tmp) { GKeyFile *key_file; gchar *str = NULL; @@ -535,7 +539,7 @@ restore (const gchar *filename, run_cmd (command); g_free (command); - dir_fn = replace_variables ("$TMP" G_DIR_SEPARATOR_S EVOLUTION_DIR_FILE); + dir_fn = replace_variables ("$TMP" G_DIR_SEPARATOR_S EVOLUTION_DIR_FILE, TRUE); if (!dir_fn) { g_warning ("Failed to create evolution's dir filename"); goto end; @@ -607,7 +611,7 @@ restore (const gchar *filename, if (is_new_format) { /* new format has it in DATADIR... */ - GString *file = replace_variables (EVOLUTION_DIR ANCIENT_GCONF_DUMP_FILE); + GString *file = replace_variables (EVOLUTION_DIR ANCIENT_GCONF_DUMP_FILE, TRUE); if (file && g_file_test (file->str, G_FILE_TEST_EXISTS)) { /* ancient backup */ replace_in_file ( -- cgit v1.2.3