]> git.ipfire.org Git - thirdparty/gnulib.git/commit
fcntl-h: support O_DIRECTORY
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 27 May 2025 01:30:18 +0000 (18:30 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 27 May 2025 02:25:48 +0000 (19:25 -0700)
commitbc1bf2fca2b692e502389cf85a6cef3e1669b9ca
treeba9ee1afcb90e86510c223bd14553226abb1d274
parent4ccca948754f8362b9ae776a85d754779fc8de95
fcntl-h: support O_DIRECTORY

It is relatively easy to support O_DIRECTORY on platforms that
lack it, so let’s do that instead of having to work around bugs
like <https://bugs.gnu.org/78509#95>.
* lib/fcntl.in.h (O_DIRECTORY): Default to 0x20000000 not 0,
since Gnulib now supports it.
* lib/open.c, lib/openat.c (OPEN_TRAILING_SLASH_BUG):
Default to false, so that this can be used outside #if.
(open, openat): Add support for O_DIRECTORY on platforms that lack it.
If fstat fails, fail instead of assuming the file is a directory,
since failure can occur due to EOVERFLOW, etc.
Rearrange code to minimize differences between open.c and openat.c.
* m4/fcntl-o.m4 (gl_FCNTL_O_FLAGS): Also test O_DIRECTORY,
and define HAVE_WORKING_O_DIRECTORY if needed.
Prefer AS_CASE for Emacs’s benefit.
* m4/open.m4 (gl_FUNC_OPEN):
* m4/openat.m4 (gl_FUNC_OPENAT):
Require gl_FCNTL_O_FLAGS and replace the function
if O_DIRECTORY does not work.
* tests/test-open.h: Test O_DIRECTORY.
ChangeLog
doc/posix-functions/open.texi
doc/posix-functions/openat.texi
doc/posix-headers/fcntl.texi
lib/fcntl.in.h
lib/open.c
lib/openat.c
m4/fcntl-o.m4
m4/open.m4
m4/openat.m4
tests/test-open.h