From: Jeff King <peff@peff.net>
To: Stefan Beller <sbeller@google.com>
Cc: sahlberg@google.com, jrnieder@gmail.com, gitster@pobox.com,
git@vger.kernel.org
Subject: [PATCH 1/4] error: save and restore errno
Date: Tue, 18 Nov 2014 20:37:10 -0500 [thread overview]
Message-ID: <20141119013710.GA2135@peff.net> (raw)
In-Reply-To: <20141119013532.GA861@peff.net>
It's common to use error() to return from a function, like:
if (open(...) < 0)
return error("open failed");
Unfortunately this may clobber the errno from the open()
call. So we often end up with code like this:
if (open(...) < 0) {
int saved_errno = errno;
error("open failed");
errno = saved_errno;
return -1;
}
which is less nice. Let's teach error() to save and restore
errno in each call, so that the original errno is preserved.
This is slightly less efficient for callers which do not
care, but error code paths are generally not performance
critical anyway.
Signed-off-by: Jeff King <peff@peff.net>
---
It's pretty minor to just handle errno in the callers, but I feel like
I've wanted this at least a dozen times, and it seems like it cannot
possibly hurt (i.e., I imagine there are callers where we _should_ be
doing the errno dance but have not realized it).
usage.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/usage.c b/usage.c
index ed14645..ee44d57 100644
--- a/usage.c
+++ b/usage.c
@@ -142,10 +142,13 @@ void NORETURN die_errno(const char *fmt, ...)
int error(const char *err, ...)
{
va_list params;
+ int saved_errno = errno;
va_start(params, err);
error_routine(err, params);
va_end(params);
+
+ errno = saved_errno;
return -1;
}
--
2.1.2.596.g7379948
next prev parent reply other threads:[~2014-11-19 1:37 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-18 23:17 [PATCH] refs.c: handle locking failure during transaction better Stefan Beller
2014-11-18 23:34 ` Stefan Beller
2014-11-19 1:13 ` Stefan Beller
2014-11-19 1:35 ` [PATCH 0/4] error cleanups in lock_ref_sha1_basic Jeff King
2014-11-19 1:37 ` Jeff King [this message]
2014-11-19 1:41 ` [PATCH 1/4] error: save and restore errno Stefan Beller
2014-11-19 1:43 ` Jonathan Nieder
2014-11-19 1:47 ` Jeff King
2014-11-19 18:14 ` Junio C Hamano
2014-11-19 18:28 ` Jeff King
2014-11-19 1:37 ` [PATCH 2/4] lock_ref_sha1_basic: simplify errno handling Jeff King
2014-11-19 1:54 ` Jonathan Nieder
2014-11-21 9:25 ` Michael Haggerty
2014-11-19 1:37 ` [PATCH 3/4] lock_ref_sha1_basic: simplify error code path Jeff King
2014-11-19 2:00 ` Jonathan Nieder
2014-11-19 2:04 ` Jeff King
2014-11-19 2:07 ` Jonathan Nieder
2014-11-19 21:41 ` Junio C Hamano
2014-11-19 22:28 ` Jeff King
2014-11-19 22:34 ` Junio C Hamano
2014-11-19 22:36 ` Jeff King
2014-11-20 1:07 ` Jonathan Nieder
2014-11-19 1:41 ` [PATCH 4/4] lock_ref_sha1_basic: do not die on locking errors Jeff King
2014-11-19 2:05 ` Jonathan Nieder
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20141119013710.GA2135@peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jrnieder@gmail.com \
--cc=sahlberg@google.com \
--cc=sbeller@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).