From b238b37a0f9d12f87dc9b7ce1ece4bcde566a45f Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Thu, 13 Sep 2012 20:56:25 -0400 Subject: [PATCH] add O_PATH/O_SEARCH support to fcntl.h 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 | 2 ++ arch/i386/bits/fcntl.h | 2 ++ arch/mips/bits/fcntl.h | 2 ++ arch/x86_64/bits/fcntl.h | 2 ++ include/fcntl.h | 2 +- 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/arch/arm/bits/fcntl.h b/arch/arm/bits/fcntl.h index 9595f9ca..7e746026 100644 --- a/arch/arm/bits/fcntl.h +++ b/arch/arm/bits/fcntl.h @@ -10,12 +10,14 @@ #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 diff --git a/arch/i386/bits/fcntl.h b/arch/i386/bits/fcntl.h index 69f3a8f5..6325a332 100644 --- a/arch/i386/bits/fcntl.h +++ b/arch/i386/bits/fcntl.h @@ -10,12 +10,14 @@ #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 diff --git a/arch/mips/bits/fcntl.h b/arch/mips/bits/fcntl.h index 6795800d..6f912fb9 100644 --- a/arch/mips/bits/fcntl.h +++ b/arch/mips/bits/fcntl.h @@ -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 diff --git a/arch/x86_64/bits/fcntl.h b/arch/x86_64/bits/fcntl.h index 9e07229e..c02b0b53 100644 --- a/arch/x86_64/bits/fcntl.h +++ b/arch/x86_64/bits/fcntl.h @@ -10,12 +10,14 @@ #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 diff --git a/include/fcntl.h b/include/fcntl.h index cbaec5da..b06c276f 100644 --- a/include/fcntl.h +++ b/include/fcntl.h @@ -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 -- 2.20.1