Merge branch 'rs/freebsd-getcwd-workaround'
FreeBSD implementation of getcwd(3) behaved differently when an intermediate directory is unreadable/unsearchable depending on the length of the buffer provided, which our strbuf_getcwd() was not aware of. strbuf_getcwd() has been taught to cope with it better. * rs/freebsd-getcwd-workaround: strbuf: support long paths w/o read rights in strbuf_getcwd() on FreeBSD
This commit is contained in:
11
strbuf.c
11
strbuf.c
@ -449,6 +449,17 @@ int strbuf_getcwd(struct strbuf *sb)
|
||||
strbuf_setlen(sb, strlen(sb->buf));
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* If getcwd(3) is implemented as a syscall that falls
|
||||
* back to a regular lookup using readdir(3) etc. then
|
||||
* we may be able to avoid EACCES by providing enough
|
||||
* space to the syscall as it's not necessarily bound
|
||||
* to the same restrictions as the fallback.
|
||||
*/
|
||||
if (errno == EACCES && guessed_len < PATH_MAX)
|
||||
continue;
|
||||
|
||||
if (errno != ERANGE)
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user