gedit r6960 - in trunk: . gedit



Author: pborelli
Date: Sat Mar 14 20:09:50 2009
New Revision: 6960
URL: http://svn.gnome.org/viewvc/gedit?rev=6960&view=rev

Log:
2009-03-14  Paolo Borelli  <pborelli katamail com>

	* gedit/gedit-document-saver.c:
	* gedit/gedit-local-document-saver.c:
	Make sure to fsync the files to disk when saving.



Modified:
   trunk/ChangeLog
   trunk/configure.ac
   trunk/gedit/gedit-document-saver.c
   trunk/gedit/gedit-local-document-saver.c
   trunk/gedit/gedit-session.c

Modified: trunk/configure.ac
==============================================================================
--- trunk/configure.ac	(original)
+++ trunk/configure.ac	Sat Mar 14 20:09:50 2009
@@ -45,6 +45,8 @@
 
 AC_SYS_LARGEFILE
 
+AC_CHECK_FUNCS(fsync)
+
 dnl make sure we keep ACLOCAL_FLAGS around for maintainer builds to work
 AC_SUBST(ACLOCAL_AMFLAGS, "$ACLOCAL_FLAGS -I m4")
 

Modified: trunk/gedit/gedit-document-saver.c
==============================================================================
--- trunk/gedit/gedit-document-saver.c	(original)
+++ trunk/gedit/gedit-document-saver.c	Sat Mar 14 20:09:50 2009
@@ -336,7 +336,9 @@
 
 	/* Truncate the file to 0, in case it was not empty */
 	if (res)
+	{
 		res = (ftruncate (fd, 0) == 0);
+	}
 
 	/* Save the file content */
 	if (res)
@@ -383,7 +385,17 @@
 		}
 	}
 
-	g_free (contents);
+#ifdef HAVE_FSYNC
+	/* Ensure that all the data reaches disk */
+	if (res && fsync (fd) != 0)
+	{
+		g_set_error (error,
+			     G_IO_ERROR,
+			     g_io_error_from_errno (errno),
+			     "%s", g_strerror (errno));
+		res = FALSE;
+	}
+#endif
 
 	if (!res)
 	{
@@ -393,6 +405,8 @@
 			     "%s", g_strerror (errno));
 	}
 
+	g_free (contents);
+
 	return res;
 }
 

Modified: trunk/gedit/gedit-local-document-saver.c
==============================================================================
--- trunk/gedit/gedit-local-document-saver.c	(original)
+++ trunk/gedit/gedit-local-document-saver.c	Sat Mar 14 20:09:50 2009
@@ -234,6 +234,21 @@
 
 	} while ((bytes_read != 0) && (ret == TRUE));
 
+#ifdef HAVE_FSYNC
+	if (ret)
+	{
+		/* Ensure that all the data reaches disk */
+		if (fsync (dfd) != 0)
+		{
+			g_set_error (error,
+				     G_IO_ERROR,
+				     g_io_error_from_errno (errno),
+				     "%s", g_strerror (errno));
+			ret = FALSE;
+		}
+	}
+#endif
+
 	g_free (buffer);
 
 	return ret;

Modified: trunk/gedit/gedit-session.c
==============================================================================
--- trunk/gedit/gedit-session.c	(original)
+++ trunk/gedit/gedit-session.c	Sat Mar 14 20:09:50 2009
@@ -531,7 +531,6 @@
 		gtk_widget_hide (GTK_WIDGET (panel));
 	}
 
-  
 	active_document = g_key_file_get_string (state_file, group_name,
 						 "active-document", NULL);
 	documents = g_key_file_get_string_list (state_file, group_name,



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