Use g_file_set_contents() to write files to disk in utils_write_file() for better error checking and to avoid corruption of config files when there is no more free disk space.
This is not used for saving documents (part of Debian bug #503391). git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@3507 ea778897-0a13-0410-b9d1-a72fbfd435f5
This commit is contained in:
parent
f0a1081c38
commit
ba97eb158c
@ -6,6 +6,11 @@
|
||||
Reset the file status when saving a file failed.
|
||||
Disable GIO based file monitoring for now since it doesn't work yet
|
||||
as stable as it should. Define USE_GIO_FILEMON to use.
|
||||
* src/utils.c:
|
||||
Use g_file_set_contents() to write files to disk in
|
||||
utils_write_file() for better error checking and to avoid corruption
|
||||
of config files when there is no more free disk space.
|
||||
This is not used for saving documents (part of Debian bug #503391).
|
||||
|
||||
|
||||
2009-01-22 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
|
||||
|
39
src/utils.c
39
src/utils.c
@ -201,7 +201,10 @@ gboolean utils_is_opening_brace(gchar c, gboolean include_angles)
|
||||
/**
|
||||
* 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.
|
||||
* 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.
|
||||
*
|
||||
* @param filename The filename of the file to write, in locale encoding.
|
||||
* @param text The text to write into the file.
|
||||
@ -211,34 +214,16 @@ gboolean utils_is_opening_brace(gchar c, gboolean include_angles)
|
||||
**/
|
||||
gint utils_write_file(const gchar *filename, const gchar *text)
|
||||
{
|
||||
FILE *fp;
|
||||
gint bytes_written, len;
|
||||
GError *error = NULL;
|
||||
|
||||
if (filename == 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))
|
||||
{
|
||||
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;
|
||||
geany_debug("%s: could not write to file %s (%s)", G_STRFUNC, filename, error->message);
|
||||
g_error_free(error);
|
||||
return EIO;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user