summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--read-cache.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/read-cache.c b/read-cache.c
index 2eb81a66b9..536086e1fe 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -2474,30 +2474,32 @@ static int clean_shared_index_files(const char *current_hex)
static int write_shared_index(struct index_state *istate,
struct lock_file *lock, unsigned flags)
{
- struct tempfile *temp;
+ struct tempfile *real_temp;
+ struct tempfile **temp = &real_temp;
struct split_index *si = istate->split_index;
int ret;
- temp = mks_tempfile(git_path("sharedindex_XXXXXX"));
- if (!temp) {
+ real_temp = mks_tempfile(git_path("sharedindex_XXXXXX"));
+ if (!real_temp) {
hashclr(si->base_sha1);
return do_write_locked_index(istate, lock, flags);
}
+ temp = &real_temp;
move_cache_to_base_index(istate);
- ret = do_write_index(si->base, temp, 1);
+ ret = do_write_index(si->base, *temp, 1);
if (ret) {
- delete_tempfile(&temp);
+ delete_tempfile(temp);
return ret;
}
- ret = adjust_shared_perm(get_tempfile_path(temp));
+ ret = adjust_shared_perm(get_tempfile_path(*temp));
if (ret) {
int save_errno = errno;
- error("cannot fix permission bits on %s", get_tempfile_path(temp));
- delete_tempfile(&temp);
+ error("cannot fix permission bits on %s", get_tempfile_path(*temp));
+ delete_tempfile(temp);
errno = save_errno;
return ret;
}
- ret = rename_tempfile(&temp,
+ ret = rename_tempfile(temp,
git_path("sharedindex.%s", sha1_to_hex(si->base->sha1)));
if (!ret) {
hashcpy(si->base_sha1, si->base->sha1);