On Thu, 1 Apr 2010 12:41:13 +0100 Nick Treleaven nick.treleaven@btinternet.com wrote:
Btw, the bugs with GVFS didn't appear with GNOME 2.26 (and probably before), so I think we can safely use fopen() and fprintf()/fwrite() there. Then, your proposal about version separation (use GIO with GLib>=2.16 and fopen()/g_file_set_contents() with other) is extremely attractive. Do you know if there is a way to get GLib version at runtime, not at compile-time (so that there is no need to rebuild all the packages for different versions)?
I'm going to start working on it; if this is OK, I'll send a patch ASAP.
BTW There is another problem that file saving should solve - not losing existing file data when there is no space to save the new file. Does g_file_replace_contents() handle this problem? (g_file_set_contents () does handle this but as you mention has other problems).
According to the docs for g_file_replace, which g_file_replace_contents uses internally, this case may be handled:
"This will try to replace the file in the safest way possible so that any errors during the writing will not affect an already existing copy of the file. For instance, for local files it may write to a temporary file and then atomically rename over the destination when the stream is closed." http://library.gnome.org/devel/gio/unstable/GFile.html#g-file-replace
Hopefully it still keeps permissions if the rename is done(!)
Regards, Nick