Re: [PATCH 1/2] sequencer: factor out rewrite_file()
- From
Jeff King <peff@peff.net>
- Date
- Nov 1, 2017, 19:47 UTC
- Message-ID
- <20171101194732.fn4n46wppl35e2z2@sigill.intra.peff.net>
- In-Reply-To
- <6150c80b-cb0e-06d4-63a7-a4f4a9107ab2@web.de>
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:
Show 13 quoted lines
> +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