[evolution] Remove .goutputstream-XXXXXX files during migration.



commit 7ca5681a186857349762f2c06e08dedaee1287a3
Author: Matthew Barnes <mbarnes redhat com>
Date:   Wed Jul 28 13:18:08 2010 -0400

    Remove .goutputstream-XXXXXX files during migration.
    
    GIO had a bug for awhile where it would leave behind an empty
    temp file with the pattern .goutputstream-XXXXXX if an output
    stream operation was cancelled.  We've had several reports of
    these files in config directories, so remove any we find.

 shell/e-shell-migrate.c |   31 +++++++++++++++++++++++++++++++
 1 files changed, 31 insertions(+), 0 deletions(-)
---
diff --git a/shell/e-shell-migrate.c b/shell/e-shell-migrate.c
index 674c8c3..faf8435 100644
--- a/shell/e-shell-migrate.c
+++ b/shell/e-shell-migrate.c
@@ -196,11 +196,13 @@ shell_xdg_migrate_config_dir_common (EShell *shell,
                                      const gchar *old_base_dir,
                                      const gchar *backend_name)
 {
+	GDir *dir;
 	const gchar *user_config_dir;
 	gchar *old_config_dir;
 	gchar *new_config_dir;
 	gchar *old_filename;
 	gchar *new_filename;
+	gchar *dirname;
 
 	user_config_dir = e_get_user_config_dir ();
 
@@ -228,6 +230,35 @@ shell_xdg_migrate_config_dir_common (EShell *shell,
 	g_free (old_filename);
 	g_free (new_filename);
 
+	/* GIO had a bug for awhile where it would leave behind an empty
+	 * temp file with the pattern .goutputstream-XXXXXX if an output
+	 * stream operation was cancelled.  We've had several reports of
+	 * these files in config directories, so remove any we find. */
+	dirname = g_build_filename (old_config_dir, "config", NULL);
+	dir = g_dir_open (dirname, 0, NULL);
+	if (dir != NULL) {
+		const gchar *basename;
+
+		while ((basename = g_dir_read_name (dir)) != NULL) {
+			gchar *filename;
+			struct stat st;
+
+			if (!g_str_has_prefix (basename, ".goutputstream"))
+				continue;
+
+			filename = g_build_filename (dirname, basename, NULL);
+
+			/* Verify the file is indeed empty. */
+			if (g_stat (filename, &st) == 0 && st.st_size == 0)
+				g_unlink (filename);
+
+			g_free (filename);
+		}
+
+		g_dir_close (dir);
+	}
+	g_free (dirname);
+
 	g_free (old_config_dir);
 	g_free (new_config_dir);
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]