gedit r6960 - in trunk: . gedit
- From: pborelli svn gnome org
- To: svn-commits-list gnome org
- Subject: gedit r6960 - in trunk: . gedit
- Date: Sat, 14 Mar 2009 20:09:50 +0000 (UTC)
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]