diff --git a/credential-store.c b/credential-store.c index f6925096ff..00aea3aa30 100644 --- a/credential-store.c +++ b/credential-store.c @@ -52,7 +52,7 @@ static void print_entry(struct credential *c) static void print_line(struct strbuf *buf) { strbuf_addch(buf, '\n'); - write_or_die(credential_lock.fd, buf->buf, buf->len); + write_or_die(get_lock_file_fd(&credential_lock), buf->buf, buf->len); } static void rewrite_credential_file(const char *fn, struct credential *c, diff --git a/lockfile.c b/lockfile.c index 2369eff541..df9c704f51 100644 --- a/lockfile.c +++ b/lockfile.c @@ -364,6 +364,20 @@ FILE *fdopen_lock_file(struct lock_file *lk, const char *mode) return lk->fp; } +int get_lock_file_fd(struct lock_file *lk) +{ + if (!lk->active) + die("BUG: get_lock_file_fd() called for unlocked object"); + return lk->fd; +} + +FILE *get_lock_file_fp(struct lock_file *lk) +{ + if (!lk->active) + die("BUG: get_lock_file_fp() called for unlocked object"); + return lk->fp; +} + char *get_locked_file_path(struct lock_file *lk) { if (!lk->active) diff --git a/lockfile.h b/lockfile.h index a483cc9ff3..d9dfbc999c 100644 --- a/lockfile.h +++ b/lockfile.h @@ -203,6 +203,9 @@ extern NORETURN void unable_to_lock_die(const char *path, int err); */ extern FILE *fdopen_lock_file(struct lock_file *lk, const char *mode); +extern int get_lock_file_fd(struct lock_file *lk); +extern FILE *get_lock_file_fp(struct lock_file *lk); + /* * Return the path of the file that is locked by the specified * lock_file object. The caller must free the memory. diff --git a/read-cache.c b/read-cache.c index 723d48dddf..96cb9a3116 100644 --- a/read-cache.c +++ b/read-cache.c @@ -2112,7 +2112,7 @@ static int commit_locked_index(struct lock_file *lk) static int do_write_locked_index(struct index_state *istate, struct lock_file *lock, unsigned flags) { - int ret = do_write_index(istate, lock->fd, 0); + int ret = do_write_index(istate, get_lock_file_fd(lock), 0); if (ret) return ret; assert((flags & (COMMIT_LOCK | CLOSE_LOCK)) != diff --git a/refs.c b/refs.c index a742d7925d..0f49a6210c 100644 --- a/refs.c +++ b/refs.c @@ -3162,6 +3162,7 @@ static int write_ref_to_lockfile(struct ref_lock *lock, { static char term = '\n'; struct object *o; + int fd; o = parse_object(sha1); if (!o) { @@ -3178,8 +3179,9 @@ static int write_ref_to_lockfile(struct ref_lock *lock, errno = EINVAL; return -1; } - if (write_in_full(lock->lk->fd, sha1_to_hex(sha1), 40) != 40 || - write_in_full(lock->lk->fd, &term, 1) != 1 || + fd = get_lock_file_fd(lock->lk); + if (write_in_full(fd, sha1_to_hex(sha1), 40) != 40 || + write_in_full(fd, &term, 1) != 1 || close_ref(lock) < 0) { int save_errno = errno; error("Couldn't write %s", lock->lk->filename.buf); @@ -4264,10 +4266,10 @@ int reflog_expire(const char *refname, const unsigned char *sha1, status |= error("couldn't write %s: %s", log_file, strerror(errno)); } else if (update && - (write_in_full(lock->lk->fd, + (write_in_full(get_lock_file_fd(lock->lk), sha1_to_hex(cb.last_kept_sha1), 40) != 40 || - write_str_in_full(lock->lk->fd, "\n") != 1 || - close_ref(lock) < 0)) { + write_str_in_full(get_lock_file_fd(lock->lk), "\n") != 1 || + close_ref(lock) < 0)) { status |= error("couldn't write %s", lock->lk->filename.buf); rollback_lock_file(&reflog_lock);