This one makes my day. A really good fix as it minimizes maintenance burden for checking incoming patches for that pattern. Reviewed-by: Stefan Beller <sbeller@xxxxxxxxxx> On Tue, Nov 18, 2014 at 5:37 PM, Jeff King <peff@xxxxxxxx> wrote: > 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