summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--lib/utimens.c14
2 files changed, 20 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 73d11397b2..5087bf4e62 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
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.
Reported by Martin Storsjö <martin@martin.st> in
<https://lists.gnu.org/archive/html/bug-gnulib/2020-12/msg00003.html>.
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: