SF.net SVN: geany:[3781] trunk
eht16 at users.sourceforge.net
eht16 at xxxxx
Mon May 11 15:56:33 UTC 2009
Revision: 3781
http://geany.svn.sourceforge.net/geany/?rev=3781&view=rev
Author: eht16
Date: 2009-05-11 15:56:33 +0000 (Mon, 11 May 2009)
Log Message:
-----------
Use plain old fwrite() in utils_write_file(). g_file_set_contents() is only used when explicitly requested.
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/utils.c
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2009-05-11 15:56:08 UTC (rev 3780)
+++ trunk/ChangeLog 2009-05-11 15:56:33 UTC (rev 3781)
@@ -4,6 +4,9 @@
Unset maybe previously keywords when setting up Scintilla for
XML files. This fixed wrong highlighting after switching back to
filetype XML from another one.
+ * src/utils.c:
+ Use plain old fwrite() in utils_write_file(). g_file_set_contents()
+ is only used when explicitly requested.
2009-05-10 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
Modified: trunk/src/utils.c
===================================================================
--- trunk/src/utils.c 2009-05-11 15:56:08 UTC (rev 3780)
+++ trunk/src/utils.c 2009-05-11 15:56:33 UTC (rev 3781)
@@ -216,10 +216,7 @@
/**
* Write the given @c text into a file with @c filename.
* If the file doesn't exist, it will be created.
- * If it already exists, it will be overwritten. Internally, g_file_set_contents() is used
- * to write the file with all its error checking and related limitations like
- * destroying hard links and possibly losing file permissions. Please read the
- * API documentation of g_file_set_contents() for details.
+ * If it already exists, it will be overwritten.
*
* @param filename The filename of the file to write, in locale encoding.
* @param text The text to write into the file.
@@ -229,17 +226,49 @@
**/
gint utils_write_file(const gchar *filename, const gchar *text)
{
- GError *error = NULL;
-
g_return_val_if_fail(filename != NULL, ENOENT);
g_return_val_if_fail(text != NULL, EINVAL);
- if (! g_file_set_contents(filename, text, -1, &error))
+ if (file_prefs.use_safe_file_saving)
{
- geany_debug("%s: could not write to file %s (%s)", G_STRFUNC, filename, error->message);
- g_error_free(error);
- return EIO;
+ GError *error = NULL;
+ if (! g_file_set_contents(filename, text, -1, &error))
+ {
+ geany_debug("%s: could not write to file %s (%s)", G_STRFUNC, filename, error->message);
+ g_error_free(error);
+ return EIO;
+ }
}
+ else
+ {
+ FILE *fp;
+ gint bytes_written, len;
+
+ if (filename == NULL)
+ return ENOENT;
+
+ len = strlen(text);
+ fp = g_fopen(filename, "w");
+ if (fp != NULL)
+ {
+ bytes_written = fwrite(text, sizeof (gchar), len, fp);
+ fclose(fp);
+
+ if (len != bytes_written)
+ {
+ geany_debug(
+ "utils_write_file(): written only %d bytes, had to write %d bytes to %s",
+ bytes_written, len, filename);
+ return EIO;
+ }
+ }
+ else
+ {
+ geany_debug("utils_write_file(): could not write to file %s (%s)",
+ filename, g_strerror(errno));
+ return errno;
+ }
+ }
return 0;
}
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