Re: [PATCH 2/2] git: continue alias lookup on EACCES errors
- From
Jonathan Nieder <jrnieder@gmail.com>
- Date
- Mar 28, 2012, 21:01 UTC
- Message-ID
- <20120328210145.GG8982@burratino>
- In-Reply-To
- <20120328205144.GA10174@sigill.intra.peff.net>
Jeff King wrote:
> That is the cost of using the mkpath convenience function (otherwise, > the compiler will complain that ".*" expects an int). We can do it > manually, but in practice, do you really expect your PATH environment > variable to overflow an int?
I'd think a check like
if (end - p > INT_MAX)
die("holy cow your PATH is big");would be good enough. Or even
assert(end - p <= INT_MAX);
if there is some environment limit I forgot about that makes that always true.
Show 13 quoted lines
>> /* >> * When a command can't be found because one of the directories >> * listed in $PATH is unsearchable, execvp reports EACCES, but >> * careful usability testing (read: analysis of occasional bug >> * reports) reveals that "No such file or directory" is more >> * intuitive. >> */ >> if (errno == EACCES && cannot_find_in_PATH(file)) >> errno = ENOENT; > > I think we can even simplify cannot_find to "!exists_in_PATH" to make > it even simpler. If it exists and execvp did not execute it, then it > must be non-executable (or there is a race condition :) ).
Yeah, sounds good. With Junio's caveat, that makes:
if (errno == EACCES && !strchr(file, '/')) errno = exists_in_PATH(file) ? EACCES : ENOENT;