[PATCH] lockfile.c: modify handling of rename failures and alternate_index_output
From: Brandon Casey <hidden>
Date: 2016-06-15 22:44:05
Subsystem:
the rest · Maintainer:
Linus Torvalds
commit_lock_file(): if rename() fails, we should not truncate the name of the lockfile. This file should be deleted by rollback_lock_file() or remove_lock_file(). commit_locked_index(): call close_lock_file() when alternate_index_output is set and handle rename() failures like commit_lock_file(). --- lockfile.c | 14 +++++++++----- 1 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/lockfile.c b/lockfile.c
index bcc4786..e8e5dbb 100644
--- a/lockfile.c
+++ b/lockfile.c@@ -171,15 +171,16 @@ int close_lock_file(struct lock_file *lk) int commit_lock_file(struct lock_file *lk) { char result_file[PATH_MAX]; - int i; + size_t i; if (lk->fd >= 0 && close_lock_file(lk)) return -1; strcpy(result_file, lk->filename); i = strlen(result_file) - 5; /* .lock */ result_file[i] = 0; - i = rename(lk->filename, result_file); + if (rename(lk->filename, result_file)) + return -1; lk->filename[0] = 0; - return i; + return 0; } int hold_locked_index(struct lock_file *lk, int die_on_error)
@@ -195,9 +196,12 @@ void set_alternate_index_output(const char *name) int commit_locked_index(struct lock_file *lk) { if (alternate_index_output) { - int result = rename(lk->filename, alternate_index_output); + if (lk->fd >= 0 && close_lock_file(lk)) + return -1; + if (rename(lk->filename, alternate_index_output)) + return -1; lk->filename[0] = 0; - return result; + return 0; } else return commit_lock_file(lk);
--
1.5.4.rc3.14.g44397-dirty