On Wed, 10 Nov 2010 13:25:56 +0000 Nick Treleaven <nick.trelea...@btinternet.com> wrote:
> On Tue, 9 Nov 2010 21:27:07 +0200 > Dimitar Zhekov <dimitar.zhe...@gmail.com> wrote: > > > > > Well, g_file_set_contents() uses buffered I/O, so obviously it's > > > > acceptable too. > > > > > > Yes, it uses fwrite and then errno. > > > > Probably fwrite(), fflush() and then errno? > > fflush() is guaranteed to set errno AFAIK. > > No: > > errno = 0; > > n_written = fwrite (contents, 1, length, file); > > if (n_written < length) > { > save_errno = errno; > > g_set_error (err, > G_FILE_ERROR, > g_file_error_from_errno (save_errno), > _("Failed to write file '%s': fwrite() failed: % > s"), display_name, > g_strerror (save_errno)); > > fclose (file); Ah, it sets errno = 0 first, assuming that fwrite() may fail to do so. > I've now committed a fix so that any write failure should be reported > to the user even if errno is 0. Please test. It won't be 0 unless you assign it. A successful library call does not clear errno. Why fake 0 errno as EIO? g_file_set_contents() doesn't, and *strerror() returns something for 0, usually "Error 0". > fclose check is fixed now too. If fwrite() and fclose() both fail, I'd prefer to see the errno of fwrite(), even if 0 (g_file_set_contents() does that). Hmmm, it'll be nice to display the filename as UTF-8 too, plus the name of the failed function, and we have a GError ready... Mind if I try to improve the error handling, using gfileutils.c as a source? There will be 3 new translation strings. -- E-gards: Jimmy _______________________________________________ Geany-devel mailing list Geany-devel@uvena.de http://lists.uvena.de/cgi-bin/mailman/listinfo/geany-devel