On Tue, Oct 31, 2017 at 10:54:21AM +0100, René Scharfe wrote: > Reduce code duplication by extracting a function for rewriting an > existing file. These patches look like an improvement on their own, but I wonder if we shouldn't just be using the existing write_file_buf() for this? Compared to your new function: > +static int rewrite_file(const char *path, const char *buf, size_t len) > +{ > + int rc = 0; > + int fd = open(path, O_WRONLY); > + if (fd < 0) > + return error_errno(_("could not open '%s' for writing"), path); > + if (write_in_full(fd, buf, len) < 0) > + rc = error_errno(_("could not write to '%s'"), path); > + if (!rc && ftruncate(fd, len) < 0) > + rc = error_errno(_("could not truncate '%s'"), path); > + close(fd); > + return rc; > +} - write_file_buf() uses O_TRUNC instead of ftruncate (but you end up there in your second patch) - it uses O_CREAT, which I think would be OK (we do not expect to create the file, but it would work fine when the file does exist). - it calls die() rather than returning an error. Looking at the callsites, I'm inclined to say that would be fine. Failing to write to the todo file is essentially a fatal error for sequencer code. -Peff