[PATCH v5 01/12] sequencer: avoid using errno clobbered by rollback_lock_file()
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Feb 26, 2018, 21:29 UTC
- Message-ID
- <8ec3a73dfdc76c503d50e34e5fc8b8a3d5ea7dd8.1519680483.git.johannes.schindelin@gmx.de>
- In-Reply-To
- <cover.1519680483.git.johannes.schindelin@gmx.de>
As pointed out in a review of the `--recreate-merges` patch series, `rollback_lock_file()` clobbers errno. Therefore, we have to report the error message that uses errno before calling said function.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> --- sequencer.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/sequencer.c b/sequencer.c index e9baaf59bd9..5aa3dc3c95c 100644 --- a/sequencer.c +++ b/sequencer.c @@ -345,12 +345,14 @@ static int write_message(const void *buf, size_t len, const char *filename, if (msg_fd < 0) return error_errno(_("could not lock '%s'"), filename); if (write_in_full(msg_fd, buf, len) < 0) { + error_errno(_("could not write to '%s'"), filename); rollback_lock_file(&msg_file); - return error_errno(_("could not write to '%s'"), filename); + return -1; } if (append_eol && write(msg_fd, "\n", 1) < 0) { + error_errno(_("could not write eol to '%s'"), filename); rollback_lock_file(&msg_file); - return error_errno(_("could not write eol to '%s'"), filename); + return -1; } if (commit_lock_file(&msg_file) < 0) { rollback_lock_file(&msg_file); @@ -2106,16 +2108,17 @@ static int save_head(const char *head) fd = hold_lock_file_for_update(&head_lock, git_path_head_file(), 0); if (fd < 0) { + error_errno(_("could not lock HEAD")); rollback_lock_file(&head_lock); - return error_errno(_("could not lock HEAD")); + return -1; } strbuf_addf(&buf, "%s\n", head); written = write_in_full(fd, buf.buf, buf.len); strbuf_release(&buf); if (written < 0) { + error_errno(_("could not write to '%s'"), git_path_head_file()); rollback_lock_file(&head_lock); - return error_errno(_("could not write to '%s'"), - git_path_head_file()); + return -1; } if (commit_lock_file(&head_lock) < 0) { rollback_lock_file(&head_lock);
-- 2.16.1.windows.4