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 9595f9c..7e74602 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 69f3a8f..6325a33 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 6795800..6f912fb 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 9e07229..c02b0b5 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 cbaec5d..b06c276 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