From 4d423a3e62c7ab0b04c4bd84995c32daff3b24c3 Mon Sep 17 00:00:00 2001 From: Michael Haggerty Date: Wed, 1 Oct 2014 12:28:40 +0200 Subject: hold_lock_file_for_append(): restore errno before returning Callers who don't pass LOCK_DIE_ON_ERROR might want to examine errno to see what went wrong, so restore errno before returning. In fact this function only has one caller, add_to_alternates_file(), and it *does* use LOCK_DIE_ON_ERROR, but, you know, think of future generations. Signed-off-by: Michael Haggerty Signed-off-by: Junio C Hamano --- lockfile.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'lockfile.c') diff --git a/lockfile.c b/lockfile.c index c51c6ec69d..b2f5d36f7e 100644 --- a/lockfile.c +++ b/lockfile.c @@ -243,15 +243,22 @@ int hold_lock_file_for_append(struct lock_file *lk, const char *path, int flags) orig_fd = open(path, O_RDONLY); if (orig_fd < 0) { if (errno != ENOENT) { + int save_errno = errno; + if (flags & LOCK_DIE_ON_ERROR) die("cannot open '%s' for copying", path); rollback_lock_file(lk); - return error("cannot open '%s' for copying", path); + error("cannot open '%s' for copying", path); + errno = save_errno; + return -1; } } else if (copy_fd(orig_fd, fd)) { + int save_errno = errno; + if (flags & LOCK_DIE_ON_ERROR) exit(128); rollback_lock_file(lk); + errno = save_errno; return -1; } return fd; -- cgit v1.2.3