[Geany-devel] Safe file saving

Алексей Антипов 1a_antipov at xxxxx
Wed Feb 3 18:03:12 UTC 2010


I have recently faced a problem when Geany seemed to corrupt my files over GVFS. The issues were as follows:
 1. Saving a modified text file (removing 1 line) over Samba (gvfsd-smb):
    - geany: makes a mess at the end of file
    - gedit: all OK
 2. Saving a modified text file over SFTP (gvfsd-sftp):
    - geany: makes a file empty (0 bytes), e.g. all content is lost
    - gedit: all OK
It seems that this bug is more GVFS-related than Geany's ('cause low-level utils like cat and echo also have some strange behaviour, which is not reproducible over shares mounted with mount.cifs), so I'm going to file these to GVFS bug tracker. But it also seems that g_file_set_contents works OK.
I have found out that Geany is able to use g_file_set_contents (with use_save_file_saving=true), but on local files only. So I suggest:
 1. Patching src/document.c to allow g_file_set_contents on both local and remote files:
--- ./src/document.c	2010-02-03 21:01:27.000000000 +0300
+++ ./src/document.c	2010-02-03 20:59:37.000000000 +0300
@@ -1691,10 +1691,8 @@
 	g_return_val_if_fail(doc != NULL, g_strdup(g_strerror(EINVAL)));
 	g_return_val_if_fail(data != NULL, g_strdup(g_strerror(EINVAL)));
-	/* we never use g_file_set_contents() for remote files as Geany only writes such files
-	 * 'into' the Fuse mountpoint, the file itself is then written by GVfs on the target
-	 * remote filesystem. */
-	if (! file_prefs.use_safe_file_saving || doc->priv->is_remote)
+	// GVFS can be buggy, so let user choose the behaviour
+	if (! file_prefs.use_safe_file_saving )//|| doc->priv->is_remote)
 		fp = g_fopen(locale_filename, "wb");
 		if (G_UNLIKELY(fp == NULL))

 2. (Possibly, but not necessarily) make this option (use_save_file_saving) accessible through the GUI
If someone's interested, here's my configuration:
Geany 0.19 svn >= r4637
Gnome 2.28.1 (gvfs 1.4.2)

More information about the Devel mailing list