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@xxxxxxxx> --- 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html