2025-10-28 Paul Eggert <eggert@cs.ucla.edu>
+ openat2: port O_TMPFILE check to non-GNU/Linux
+ * lib/openat2.c (openat2): Don’t assume !!(O_TMPFILE & O_DIRECTORY).
+ Although true on GNU/Linux, it is a hack and might not be true on
+ other systems such as Cygwin.
+
openat2-tests: port to FreeBSD, NetBSD
Problem reported by Bruno Haible in:
https://lists.gnu.org/r/bug-gnulib/2025-10/msg00117.html
| O_NOLINK | O_NOLINKS | O_NONBLOCK | O_NOTRANS
| O_RSYNC | O_SYNC
| O_TEXT | O_TMPFILE | O_TRUNC | O_TTY_INIT))))
- | ((how->flags & (O_DIRECTORY | O_CREAT))
- == (O_DIRECTORY | O_CREAT))
+ | (!!(how->flags & O_CREAT)
+ & !!(how->flags & (O_DIRECTORY | O_TMPFILE)))
| (!!(how->flags & O_TMPFILE & ~O_DIRECTORY)
- & ((how->flags & (O_ACCMODE | O_DIRECTORY))
- != (O_WRONLY | O_DIRECTORY))
- & ((how->flags & (O_ACCMODE | O_DIRECTORY))
- != (O_RDWR | O_DIRECTORY)))
+ & ((how->flags & (O_ACCMODE | O_PATH)) != O_WRONLY)
+ & ((how->flags & (O_ACCMODE | O_PATH)) != O_RDWR))
| (how->mode
& ~ (how->flags & (O_CREAT | (O_TMPFILE & ~O_DIRECTORY))
? (S_ISUID | S_ISGID | S_ISVTX