Work around macOS faccessat bug

* src/fileio.c (file_accessible_directory_p): Append an
extra "/" to work around macOS bug in faccessat (Bug#30350).
This commit is contained in:
Paul Eggert 2018-02-05 16:27:24 -08:00
parent 8e42b1bd3c
commit 5c414441ed

View file

@ -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;
}