From: Paul Eggert Date: Tue, 6 Feb 2018 00:27:24 +0000 (-0800) Subject: Work around macOS faccessat bug X-Git-Tag: emacs-27.0.90~5720 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=5c414441ed73f1a302a2953dc493e83b98589262;p=emacs.git Work around macOS faccessat bug * src/fileio.c (file_accessible_directory_p): Append an extra "/" to work around macOS bug in faccessat (Bug#30350). --- diff --git a/src/fileio.c b/src/fileio.c index be29e60fc0a..b0ef3d4e91f 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -2811,12 +2811,15 @@ file_accessible_directory_p (Lisp_Object file) dir = data; else { - /* Just check for trailing '/' when deciding whether to append '/'. - That's simpler than testing the two special cases "/" and "//", - and it's a safe optimization here. */ - char *buf = SAFE_ALLOCA (len + 3); + /* Just check for trailing '/' when deciding whether append '/' + before appending '.'. That's simpler than testing the two + special cases "/" and "//", and it's a safe optimization + here. After appending '.', append another '/' to work around + a macOS bug (Bug#30350). */ + static char const appended[] = "/./"; + char *buf = SAFE_ALLOCA (len + sizeof appended); memcpy (buf, data, len); - strcpy (buf + len, &"/."[data[len - 1] == '/']); + strcpy (buf + len, &appended[data[len - 1] == '/']); dir = buf; }