[Geany-devel] Changed file saving implementation for systems with GIO

Nick Treleaven nick.treleaven at xxxxx
Wed Nov 10 13:25:56 UTC 2010


On Tue, 9 Nov 2010 21:27:07 +0200
Dimitar Zhekov <dimitar.zhekov at 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);

Although this is better than Geany because at least the error is
reported even if errno is not set.

> > > But since we don't write the file line-by-line or
> > > something, _why_ do we use buffered I/O in the first place?..
> > 
> > I don't know. But changing implementation often introduces bugs, so
> > I'm reluctant to do so (besides fixing fclose failure).
> 
> Well the current implementation is not exactly bug-free. :)

OK, so we do need a fix so that failed writing is reported to the user,
can't rely on errno.

Nick



More information about the Devel mailing list