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

Reply via email to