SF.net SVN: geany:[5449] branches/Geany-0_19_2
ntrel at users.sourceforge.net
ntrel at xxxxx
Mon Nov 29 17:52:38 UTC 2010
Revision: 5449
http://geany.svn.sourceforge.net/geany/?rev=5449&view=rev
Author: ntrel
Date: 2010-11-29 17:52:38 +0000 (Mon, 29 Nov 2010)
Log Message:
-----------
Fix not always reporting an error message when saving a document
fails.
Check result of fclose().
Set errno to 0 before doing disk I/O.
Modified Paths:
--------------
branches/Geany-0_19_2/ChangeLog
branches/Geany-0_19_2/src/document.c
Modified: branches/Geany-0_19_2/ChangeLog
===================================================================
--- branches/Geany-0_19_2/ChangeLog 2010-11-29 13:21:35 UTC (rev 5448)
+++ branches/Geany-0_19_2/ChangeLog 2010-11-29 17:52:38 UTC (rev 5449)
@@ -1,3 +1,12 @@
+2010-11-29 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
+
+ * src/document.c:
+ Fix not always reporting an error message when saving a document
+ fails.
+ Check result of fclose().
+ Set errno to 0 before doing disk I/O.
+
+
2010-08-16 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
* scintilla/LexMarkdown.cxx:
Modified: branches/Geany-0_19_2/src/document.c
===================================================================
--- branches/Geany-0_19_2/src/document.c 2010-11-29 13:21:35 UTC (rev 5448)
+++ branches/Geany-0_19_2/src/document.c 2010-11-29 17:52:38 UTC (rev 5449)
@@ -1690,9 +1690,6 @@
static gchar *write_data_to_disk(GeanyDocument *doc, const gchar *locale_filename,
const gchar *data, gint len)
{
- FILE *fp;
- gint bytes_written;
- gint err = 0;
GError *error = NULL;
g_return_val_if_fail(doc != NULL, g_strdup(g_strerror(EINVAL)));
@@ -1700,19 +1697,30 @@
if (! file_prefs.use_safe_file_saving)
{
+ FILE *fp;
+ gint bytes_written;
+ gboolean fail = FALSE;
+
+ /* Use POSIX API to preserve file metadata */
+ errno = 0;
fp = g_fopen(locale_filename, "wb");
- if (G_UNLIKELY(fp == NULL))
- return g_strdup(g_strerror(errno));
+ if (fp == NULL)
+ fail = TRUE;
+ else
+ {
+ errno = 0;
+ bytes_written = fwrite(data, sizeof(gchar), len, fp);
- bytes_written = fwrite(data, sizeof(gchar), len, fp);
+ if (len != bytes_written)
+ fail = TRUE;
- if (G_UNLIKELY(len != bytes_written))
- err = errno;
-
- fclose(fp);
-
- if (err != 0)
- return g_strdup(g_strerror(err));
+ if (fclose(fp) != 0)
+ fail = TRUE;
+ }
+ if (fail)
+ {
+ return g_strdup(g_strerror(errno));
+ }
}
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