From: Jeff King Date: Wed, 19 Nov 2014 01:47:23 GMT Subject: Re: [PATCH 1/4] error: save and restore errno Message-ID: <20141119014722.GB2337@peff.net> In-Reply-To: <20141119014344.GP6527@google.com> On Tue, Nov 18, 2014 at 05:43:44PM -0800, Jonathan Nieder wrote: > Jeff King 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. > > What the above doesn't explain is why the caller cares about errno. > Are they going to print another message with strerror(errno)? Or are > they going to consider some errors non-errors (like ENOENT when trying > to unlink a file), in which case why is printing a message to stderr > okay? I guess the unsaid bit is: Unfortunately this may clobber the errno from the open() call. Even though error() sees the correct errno, the caller to which we are returning may see a bogus errno value. -Peff