From: Michael Haggerty Date: Wed, 1 Oct 2014 10:28:40 +0000 (+0200) Subject: hold_lock_file_for_append(): restore errno before returning X-Git-Tag: v2.2.0-rc0~53^2~2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4d423a3e62c7ab0b04c4bd84995c32daff3b24c3;p=git 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 --- 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;