1/*
2 * Copyright 2012, The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef _FCNTL_PORTABLE_H_
18#define _FCNTL_PORTABLE_H_
19
20/* Derived from development/ndk/platforms/android-3/arch-arm/include/asm/fcntl.h */
21/* NB x86 does not have these and only uses the generic definitions. */
22#define O_DIRECTORY_PORTABLE    040000
23#define O_NOFOLLOW_PORTABLE     0100000
24#define O_DIRECT_PORTABLE       0200000
25#define O_LARGEFILE_PORTABLE    0400000
26
27/* Derived from development/ndk/platforms/android-3/include/asm-generic/fcntl.h */
28#define O_ACCMODE_PORTABLE  00000003
29#define O_RDONLY_PORTABLE   00000000
30#define O_WRONLY_PORTABLE   00000001
31#define O_RDWR_PORTABLE     00000002
32#ifndef O_CREAT_PORTABLE
33#define O_CREAT_PORTABLE    00000100
34#endif
35#ifndef O_EXCL_PORTABLE
36#define O_EXCL_PORTABLE     00000200
37#endif
38#ifndef O_NOCTTY_PORTABLE
39#define O_NOCTTY_PORTABLE   00000400
40#endif
41#ifndef O_TRUNC_PORTABLE
42#define O_TRUNC_PORTABLE    00001000
43#endif
44#ifndef O_APPEND_PORTABLE
45#define O_APPEND_PORTABLE   00002000
46#endif
47#ifndef O_NONBLOCK_PORTABLE
48#define O_NONBLOCK_PORTABLE 00004000
49#endif
50#ifndef O_SYNC_PORTABLE
51#define O_SYNC_PORTABLE     00010000
52#endif
53#ifndef FASYNC_PORTABLE
54#define FASYNC_PORTABLE     00020000
55#endif
56#ifndef O_DIRECT_PORTABLE
57#define O_DIRECT_PORTABLE   00040000
58#endif
59#ifndef O_LARGEFILE_PORTABLE
60#define O_LARGEFILE_PORTABLE    00100000
61#endif
62#ifndef O_DIRECTORY_PORTABLE
63#define O_DIRECTORY_PORTABLE    00200000
64#endif
65#ifndef O_NOFOLLOW_PORTABLE
66#define O_NOFOLLOW_PORTABLE 00400000
67#endif
68#ifndef O_NOATIME_PORTABLE
69#define O_NOATIME_PORTABLE  01000000
70#endif
71#ifndef O_NDELAY_PORTABLE
72#define O_NDELAY_PORTABLE   O_NONBLOCK_PORTABLE
73#endif
74
75/* From Bionic libc/kernel/common/asm-generic/fcntl.h */
76#ifndef O_CLOEXEC_PORTABLE
77#define O_CLOEXEC_PORTABLE 02000000
78#endif
79
80#ifndef __ARCH_FLOCK64_PAD
81#define __ARCH_FLOCK64_PAD
82#endif
83
84/*
85 * For use with F_GETLK and F_SETLK
86 */
87struct flock_portable {
88   short l_type;
89   short l_whence;
90   off_t l_start;
91   off_t l_len;
92   pid_t l_pid;
93   __ARCH_FLOCK64_PAD
94};
95
96/*
97 * For use with F_GETLK64 and F_SETLK64
98 */
99struct flock64_portable {
100   short l_type;
101   short l_whence;
102   unsigned char __padding[4];
103   loff_t l_start;
104   loff_t l_len;
105   pid_t l_pid;
106   __ARCH_FLOCK64_PAD
107};
108
109#if 0
110/*
111 * The X86 Version is
112 */
113struct flock64 {
114   short l_type;
115   short l_whence;
116   loff_t l_start;
117   loff_t l_len;
118   pid_t l_pid;
119   __ARCH_FLOCK64_PAD
120};
121#endif /* 0 */
122
123
124#ifndef F_DUPFD_PORTABLE
125#define F_DUPFD_PORTABLE 0
126#define F_GETFD_PORTABLE 1
127#define F_SETFD_PORTABLE 2
128#define F_GETFL_PORTABLE 3
129#define F_SETFL_PORTABLE 4
130#endif
131
132#ifndef F_GETLK_PORTABLE
133#define F_GETLK_PORTABLE 5
134#define F_SETLK_PORTABLE 6
135#define F_SETLKW_PORTABLE 7
136#endif
137
138#ifndef F_SETOWN_PORTABLE
139#define F_SETOWN_PORTABLE 8
140#define F_GETOWN_PORTABLE 9
141#endif
142
143#ifndef F_SETSIG_PORTABLE
144#define F_SETSIG_PORTABLE 10
145#define F_GETSIG_PORTABLE 11
146#endif
147
148#ifndef F_GETLK64_PORTABLE
149#define F_GETLK64_PORTABLE 12
150#define F_SETLK64_PORTABLE 13
151#define F_SETLKW64_PORTABLE 14
152#endif
153
154/* This constant seems to be the same for all ARCH's */
155#define F_LINUX_SPECIFIC_BASE_PORTABLE 1024
156
157#define F_SETLEASE_PORTABLE             (F_LINUX_SPECIFIC_BASE+0)       /* 1024 */
158#define F_GETLEASE_PORTABLE             (F_LINUX_SPECIFIC_BASE+1)       /* 1025 */
159#define F_NOTIFY_PORTABLE               (F_LINUX_SPECIFIC_BASE+2)       /* 1026 */
160
161/* Currently these are only supported by X86_64 */
162#define F_CANCELLK_PORTABLE             (F_LINUX_SPECIFIC_BASE+5)       /* 1029 */
163#define F_DUPFD_CLOEXEC_PORTABLE        (F_LINUX_SPECIFIC_BASE+6)       /* 1030 */
164
165#endif /* _FCNTL_PORTABLE_H */
166