René Scharfe <l.s.r@xxxxxx> writes: > FreeBSD implements getcwd(3) as a syscall, but falls back to a version > based on readdir(3) if it fails for some reason. The latter requires > permissions to read and execute path components, while the former does > not. That means that if our buffer is too small and we're missing > rights we could get EACCES, but we may succeed with a bigger buffer. WOW. Just WOW. Looking at the debugging exchange from the sideline, I didn't expect this end result. > Keep retrying if getcwd(3) indicates lack of permissions until our > buffer can fit PATH_MAX bytes, as that's the maximum supported by the > syscall on FreeBSD anyway. This way we do what we can to be able to > benefit from the syscall, but we also won't loop forever if there is a > real permission issue. > > This fixes a regression introduced with 7333ed17 (setup: convert > setup_git_directory_gently_1 et al. to strbuf, 2014-07-28) for paths > longer than 127 bytes with components that miss read or execute > permissions (e.g. 0711 on /home for privacy reasons); we used a fixed > PATH_MAX-sized buffer before. > > Reported-by: Zenobiusz Kunegunda <zenobiusz.kunegunda@xxxxxxxxxx> > Signed-off-by: Rene Scharfe <l.s.r@xxxxxx> > --- Nicely analysed and fixed (or is the right word "worked around"?) Thanks, will queue.