+2024-05-20 Collin Funk <collin.funk1@gmail.com>
+
+ utimensat, utimens: Work around NetBSD 10.0 bugs.
+ * lib/utimens.c (fdutimens): Work around a NetBSD 10.0 UTIME_OMIT bug in
+ the same way as Linux kernel 2.6.32 and Solaris 11.1.
+ (lutimens): Likewise.
+ * lib/utimensat.c (rpl_utimensat): Likewise. Workaround a NetBSD 10.0
+ bug where invalid tv_nsec values are not rejected in the same way as
+ Linux kernel 2.6.22.19 on hppa.
+ * doc/posix-functions/utimensat.texi: Document the invalid tv_nsec bug.
+
2024-05-18 Bruno Haible <bruno@clisp.org>
mkfifoat: Work around a macOS 14 bug.
@item
Out-of-range values of @code{tv_nsec} do not lead to a failure on some
platforms:
-Linux kernel 2.6.22.19 on hppa.
+Linux kernel 2.6.22.19 on hppa, NetBSD 10.0.
@item
On some platforms, this function mis-handles a trailing slash:
AIX 7.2.
/* Set file access and modification times.
- Copyright (C) 2003-2023 Free Software Foundation, Inc.
+ Copyright (C) 2003-2024 Free Software Foundation, Inc.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
if (0 <= utimensat_works_really)
{
int result;
-# if __linux__ || __sun
+# if defined __linux__ || defined __sun || defined __NetBSD__
/* As recently as Linux kernel 2.6.32 (Dec 2009), several file
systems (xfs, ntfs-3g) have bugs with a single UTIME_OMIT,
but work if both times are either explicitly specified or
where UTIME_OMIT would have worked.
The same bug occurs in Solaris 11.1 (Apr 2013).
+ The same bug occurs in NetBSD 10.0 (May 2024).
FIXME: Simplify this for Linux in 2016 and for Solaris in
2024, when file system bugs are no longer common. */
# endif
if (futimes (fd, t) == 0)
{
-# if __linux__ && __GLIBC__
+# if defined __linux__ && defined __GLIBC__
/* Work around a longstanding glibc bug, still present as
of 2010-12-27. On older Linux kernels that lack both
utimensat and utimes, glibc's futimes rounds instead of
if (0 <= lutimensat_works_really)
{
int result;
-# if __linux__ || __sun
+# if defined __linux__ || defined __sun || defined __NetBSD__
/* As recently as Linux kernel 2.6.32 (Dec 2009), several file
systems (xfs, ntfs-3g) have bugs with a single UTIME_OMIT,
but work if both times are either explicitly specified or
UTIME_OMIT would have worked.
The same bug occurs in Solaris 11.1 (Apr 2013).
+ The same bug occurs in NetBSD 10.0 (May 2024).
FIXME: Simplify this for Linux in 2016 and for Solaris in
2024, when file system bugs are no longer common. */
/* Set the access and modification time of a file relative to directory fd.
- Copyright (C) 2009-2023 Free Software Foundation, Inc.
+ Copyright (C) 2009-2024 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
int flag)
# undef utimensat
{
-# if defined __linux__ || defined __sun
+# if defined __linux__ || defined __sun || defined __NetBSD__
struct timespec ts[2];
# endif
if (0 <= utimensat_works_really)
{
int result;
-# if defined __linux__ || defined __sun
+# if defined __linux__ || defined __sun || defined __NetBSD__
struct stat st;
/* As recently as Linux kernel 2.6.32 (Dec 2009), several file
systems (xfs, ntfs-3g) have bugs with a single UTIME_OMIT,
UTIME_OMIT would have worked.
The same bug occurs in Solaris 11.1 (Apr 2013).
+ The same bug occurs in NetBSD 10.0 (May 2024).
FIXME: Simplify this in 2024, when these file system bugs are
no longer common on Gnulib target platforms. */
ts[1] = times[1];
times = ts;
}
-# ifdef __hppa__
+# if defined __hppa__ || defined __NetBSD__
/* Linux kernel 2.6.22.19 on hppa does not reject invalid tv_nsec
- values. */
+ values.
+
+ The same bug occurs in NetBSD 10.0 (May 2024). */
else if (times
&& ((times[0].tv_nsec != UTIME_NOW
&& ! (0 <= times[0].tv_nsec