add O_PATH/O_SEARCH support to fcntl.h
authorRich Felker <dalias@aerifal.cx>
Fri, 14 Sep 2012 00:56:25 +0000 (20:56 -0400)
committerRich Felker <dalias@aerifal.cx>
Fri, 14 Sep 2012 00:56:25 +0000 (20:56 -0400)
I'm not 100% sure that Linux's O_PATH meets the POSIX requirements for
O_SEARCH, but it seems very close if not perfect. and old kernels
ignore it, so O_SEARCH will still work as desired as long as the
caller has read permissions to the directory.

arch/arm/bits/fcntl.h
arch/i386/bits/fcntl.h
arch/mips/bits/fcntl.h
arch/x86_64/bits/fcntl.h
include/fcntl.h

index 9595f9cad5e1728f7f7b9c23b05fb1b2de2491a7..7e746026908b7850f977d63088112f58a02918b4 100644 (file)
 #define O_DIRECTORY  040000
 #define O_NOFOLLOW  0100000
 #define O_CLOEXEC  02000000
+#define O_SEARCH  010000000
 
 #define O_ASYNC      020000
 #define O_DIRECT    0200000
 #define O_LARGEFILE 0400000
 #define O_NOATIME  01000000
 #define O_NDELAY O_NONBLOCK
+#define O_PATH    010000000
 
 #define F_DUPFD  0
 #define F_GETFD  1
index 69f3a8f55685c985dcb63e5542ca602a7873d91c..6325a33242de3d9045e4bb117db24415df8f644c 100644 (file)
 #define O_DIRECTORY 0200000
 #define O_NOFOLLOW  0400000
 #define O_CLOEXEC  02000000
+#define O_SEARCH  010000000
 
 #define O_ASYNC      020000
 #define O_DIRECT     040000
 #define O_LARGEFILE 0100000
 #define O_NOATIME  01000000
 #define O_NDELAY O_NONBLOCK
+#define O_PATH    010000000
 
 #define F_DUPFD  0
 #define F_GETFD  1
index 6795800da8c0a8f3d30d4338600de6e71c461f37..6f912fb9363a54f7f0e444096126da54f0b6e08f 100644 (file)
@@ -14,6 +14,8 @@
 #define O_NOFOLLOW  0400000
 #define O_NOATIME  01000000
 #define O_CLOEXEC  02000000
+#define O_PATH    010000000
+#define O_SEARCH  010000000
 
 #define O_NDELAY O_NONBLOCK
 
index 9e07229eba07de7df97aae629484d4309d882f64..c02b0b53e9a674e7d3a2fb2ca0c79e5ba4e814e1 100644 (file)
 #define O_DIRECTORY 0200000
 #define O_NOFOLLOW  0400000
 #define O_CLOEXEC  02000000
+#define O_SEARCH  010000000
 
 #define O_ASYNC      020000
 #define O_DIRECT     040000
 #define O_LARGEFILE       0
 #define O_NOATIME  01000000
 #define O_NDELAY O_NONBLOCK
+#define O_PATH    010000000
 
 #define F_DUPFD  0
 #define F_GETFD  1
index cbaec5dae87559babdf1633a89ecf1f680b1a8a1..b06c276f4c8ad49edc7c4c2ffa0187c4c042ce3a 100644 (file)
@@ -37,7 +37,7 @@ int openat(int, const char *, int, ...);
 int posix_fadvise(int, off_t, off_t, int);
 int posix_fallocate(int, off_t, off_t);
 
-#define O_ACCMODE 03
+#define O_ACCMODE (O_RDWR|O_SEARCH)
 #define O_RDONLY  00
 #define O_WRONLY  01
 #define O_RDWR    02