SF.net SVN: geany:[5396] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Thu Nov 11 13:13:37 UTC 2010


Revision: 5396
          http://geany.svn.sourceforge.net/geany/?rev=5396&view=rev
Author:   ntrel
Date:     2010-11-11 13:13:37 +0000 (Thu, 11 Nov 2010)

Log Message:
-----------
Display better error messages when saving a document fails (patch by
Dimitar Zhekov, thanks).

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/document.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2010-11-10 18:19:20 UTC (rev 5395)
+++ trunk/ChangeLog	2010-11-11 13:13:37 UTC (rev 5396)
@@ -1,3 +1,10 @@
+2010-11-11  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
+
+ * src/document.c:
+   Display better error messages when saving a document fails (patch by
+   Dimitar Zhekov, thanks).
+
+
 2010-11-10  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
 
  * src/templates.c, src/document.c:

Modified: trunk/src/document.c
===================================================================
--- trunk/src/document.c	2010-11-10 18:19:20 UTC (rev 5395)
+++ trunk/src/document.c	2010-11-11 13:13:37 UTC (rev 5396)
@@ -1726,32 +1726,59 @@
 		g_object_unref(fp);
 #else
 		FILE *fp;
-		gint bytes_written;
-		gboolean fail = FALSE;
+		int save_errno;
+		gchar *display_name = g_filename_display_name(locale_filename);
 
 		/* Use POSIX API for unsafe saving (GVFS-unsafe) */
+		/* The error handling is taken from glib-2.26.0 gfileutils.c */
 		errno = 0;
 		fp = g_fopen(locale_filename, "wb");
 		if (fp == NULL)
-			fail = TRUE;
+		{
+			save_errno = errno;
+
+			g_set_error(&error,
+				G_FILE_ERROR,
+				g_file_error_from_errno(save_errno),
+				_("Failed to open file '%s' for writing: fopen() failed: %s"),
+				display_name,
+				g_strerror(save_errno));
+		}
 		else
 		{
+			gint bytes_written;
+
 			errno = 0;
 			bytes_written = fwrite(data, sizeof(gchar), len, fp);
 
 			if (len != bytes_written)
-				fail = TRUE;
+			{
+				save_errno = errno;
 
-			if (fclose(fp) != 0)
-				fail = TRUE;
+				g_set_error(&error,
+					G_FILE_ERROR,
+					g_file_error_from_errno(save_errno),
+					_("Failed to write file '%s': fwrite() failed: %s"),
+					display_name,
+					g_strerror(save_errno));
+			}
+
+			errno = 0;
+			/* preserve the fwrite() error if any */
+			if (fclose(fp) != 0 && error == NULL)
+			{
+				save_errno = errno;
+
+				g_set_error(&error,
+					G_FILE_ERROR,
+					g_file_error_from_errno(save_errno),
+					_("Failed to close file '%s': fclose() failed: %s"),
+					display_name,
+					g_strerror(save_errno));
+			}
 		}
-		if (fail)
-		{
-			gint err = errno;
-			if (!err)
-				err = EIO;
-			return g_strdup(g_strerror(err));
-		}
+
+		g_free(display_name);
 #endif
 	}
 	else


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list