From: Bruno Haible <bruno@clisp.org> Date: Sat, 2 Jan 2021 17:59:12 +0000 (+0100) Subject: utimens: Fix test failure on macOS 10.13. X-Git-Tag: v1.0~3232 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=86c8ff740b64f3724de20d71dca481bef30b18dd;p=gnulib.git utimens: Fix test failure on macOS 10.13. * lib/utimens.c (fdutimens): Before calling utimensat, recognize a filename ending in a slash that does not point to a directory. --- diff --git a/ChangeLog b/ChangeLog index 73d11397b2..5087bf4e62 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2021-01-02 Bruno Haible <bruno@clisp.org> + + utimens: Fix test failure on macOS 10.13. + * lib/utimens.c (fdutimens): Before calling utimensat, recognize a + filename ending in a slash that does not point to a directory. + 2021-01-02 Bruno Haible <bruno@clisp.org> utimens: Avoid test failures on macOS 10.13. diff --git a/lib/utimens.c b/lib/utimens.c index 5bbae05813..9f9c30af2f 100644 --- a/lib/utimens.c +++ b/lib/utimens.c @@ -246,6 +246,20 @@ fdutimens (int fd, char const *file, struct timespec const timespec[2]) # if HAVE_UTIMENSAT if (fd < 0) { +# if defined __APPLE__ && defined __MACH__ + size_t len = strlen (file); + if (len > 0 && file[len - 1] == '/') + { + struct stat statbuf; + if (stat (file, &statbuf) < 0) + return -1; + if (!S_ISDIR (statbuf.st_mode)) + { + errno = ENOTDIR; + return -1; + } + } +# endif result = utimensat (AT_FDCWD, file, ts, 0); # ifdef __linux__ /* Work around a kernel bug: