chiark / gitweb /
path-util: in path_is_mount_point() fall back to the classic stat() test if fs does...
[elogind.git] / src / shared / missing.h
1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3 #pragma once
4
5 /***
6   This file is part of systemd.
7
8   Copyright 2010 Lennart Poettering
9
10   systemd is free software; you can redistribute it and/or modify it
11   under the terms of the GNU Lesser General Public License as published by
12   the Free Software Foundation; either version 2.1 of the License, or
13   (at your option) any later version.
14
15   systemd is distributed in the hope that it will be useful, but
16   WITHOUT ANY WARRANTY; without even the implied warranty of
17   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18   Lesser General Public License for more details.
19
20   You should have received a copy of the GNU Lesser General Public License
21   along with systemd; If not, see <http://www.gnu.org/licenses/>.
22 ***/
23
24 /* Missing glibc definitions to access certain kernel APIs */
25
26 #include <sys/resource.h>
27 #include <sys/syscall.h>
28 #include <fcntl.h>
29 #include <unistd.h>
30 #include <linux/oom.h>
31
32 #ifdef HAVE_AUDIT
33 #include <libaudit.h>
34 #endif
35
36 #include "macro.h"
37
38 #ifdef ARCH_MIPS
39 #include <asm/sgidefs.h>
40 #endif
41
42 #ifndef RLIMIT_RTTIME
43 #define RLIMIT_RTTIME 15
44 #endif
45
46 #ifndef F_LINUX_SPECIFIC_BASE
47 #define F_LINUX_SPECIFIC_BASE 1024
48 #endif
49
50 #ifndef F_SETPIPE_SZ
51 #define F_SETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 7)
52 #endif
53
54 #ifndef F_GETPIPE_SZ
55 #define F_GETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 8)
56 #endif
57
58 #ifndef IP_FREEBIND
59 #define IP_FREEBIND 15
60 #endif
61
62 #ifndef OOM_SCORE_ADJ_MIN
63 #define OOM_SCORE_ADJ_MIN (-1000)
64 #endif
65
66 #ifndef OOM_SCORE_ADJ_MAX
67 #define OOM_SCORE_ADJ_MAX 1000
68 #endif
69
70 #ifndef AUDIT_SERVICE_START
71 #define AUDIT_SERVICE_START 1130 /* Service (daemon) start */
72 #endif
73
74 #ifndef AUDIT_SERVICE_STOP
75 #define AUDIT_SERVICE_STOP 1131 /* Service (daemon) stop */
76 #endif
77
78 #ifndef TIOCVHANGUP
79 #define TIOCVHANGUP 0x5437
80 #endif
81
82 #ifndef IP_TRANSPARENT
83 #define IP_TRANSPARENT 19
84 #endif
85
86 #if !HAVE_DECL_PIVOT_ROOT
87 static inline int pivot_root(const char *new_root, const char *put_old) {
88         return syscall(SYS_pivot_root, new_root, put_old);
89 }
90 #endif
91
92 #ifdef __x86_64__
93 #  ifndef __NR_fanotify_init
94 #    define __NR_fanotify_init 300
95 #  endif
96 #  ifndef __NR_fanotify_mark
97 #    define __NR_fanotify_mark 301
98 #  endif
99 #elif defined _MIPS_SIM
100 #  if _MIPS_SIM == _MIPS_SIM_ABI32
101 #    ifndef __NR_fanotify_init
102 #      define __NR_fanotify_init 4336
103 #    endif
104 #    ifndef __NR_fanotify_mark
105 #      define __NR_fanotify_mark 4337
106 #    endif
107 #  elif _MIPS_SIM == _MIPS_SIM_NABI32
108 #    ifndef __NR_fanotify_init
109 #      define __NR_fanotify_init 6300
110 #    endif
111 #    ifndef __NR_fanotify_mark
112 #      define __NR_fanotify_mark 6301
113 #    endif
114 #  elif _MIPS_SIM == _MIPS_SIM_ABI64
115 #    ifndef __NR_fanotify_init
116 #      define __NR_fanotify_init 5295
117 #    endif
118 #    ifndef __NR_fanotify_mark
119 #      define __NR_fanotify_mark 5296
120 #    endif
121 #  endif
122 #else
123 #  ifndef __NR_fanotify_init
124 #    define __NR_fanotify_init 338
125 #  endif
126 #  ifndef __NR_fanotify_mark
127 #    define __NR_fanotify_mark 339
128 #  endif
129 #endif
130
131 #ifndef HAVE_FANOTIFY_INIT
132 static inline int fanotify_init(unsigned int flags, unsigned int event_f_flags) {
133         return syscall(__NR_fanotify_init, flags, event_f_flags);
134 }
135 #endif
136
137 #ifndef HAVE_FANOTIFY_MARK
138 static inline int fanotify_mark(int fanotify_fd, unsigned int flags, uint64_t mask,
139                                 int dfd, const char *pathname) {
140 #if defined _MIPS_SIM && _MIPS_SIM == _MIPS_SIM_ABI32 || defined __powerpc__ && !defined __powerpc64__
141         union {
142                 uint64_t _64;
143                 uint32_t _32[2];
144         } _mask;
145         _mask._64 = mask;
146
147         return syscall(__NR_fanotify_mark, fanotify_fd, flags,
148                        _mask._32[0], _mask._32[1], dfd, pathname);
149 #else
150         return syscall(__NR_fanotify_mark, fanotify_fd, flags, mask, dfd, pathname);
151 #endif
152 }
153 #endif
154
155 #ifndef BTRFS_IOCTL_MAGIC
156 #define BTRFS_IOCTL_MAGIC 0x94
157 #endif
158
159 #ifndef BTRFS_PATH_NAME_MAX
160 #define BTRFS_PATH_NAME_MAX 4087
161 #endif
162
163 struct btrfs_ioctl_vol_args {
164         int64_t fd;
165         char name[BTRFS_PATH_NAME_MAX + 1];
166 };
167
168 #ifndef BTRFS_IOC_DEFRAG
169 #define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, struct btrfs_ioctl_vol_args)
170 #endif
171
172 #ifndef BTRFS_SUPER_MAGIC
173 #define BTRFS_SUPER_MAGIC 0x9123683E
174 #endif
175
176 #ifndef MS_MOVE
177 #define MS_MOVE 8192
178 #endif
179
180 #ifndef MS_PRIVATE
181 #define MS_PRIVATE  (1 << 18)
182 #endif
183
184 #if !HAVE_DECL_GETTID
185 static inline pid_t gettid(void) {
186         return (pid_t) syscall(SYS_gettid);
187 }
188 #endif
189
190 #ifndef SCM_SECURITY
191 #define SCM_SECURITY 0x03
192 #endif
193
194 #ifndef MS_STRICTATIME
195 #define MS_STRICTATIME (1<<24)
196 #endif
197
198 #ifndef PR_SET_NO_NEW_PRIVS
199 #define PR_SET_NO_NEW_PRIVS 38
200 #endif
201
202 #ifndef PR_SET_CHILD_SUBREAPER
203 #define PR_SET_CHILD_SUBREAPER 36
204 #endif
205
206 #ifndef MAX_HANDLE_SZ
207 #define MAX_HANDLE_SZ 128
208 #endif
209
210 #ifdef __x86_64__
211 #  ifndef __NR_name_to_handle
212 #    define __NR_name_to_handle 303
213 #  endif
214 #else
215 #  ifndef __NR_name_to_handle
216 #    define __NR_name_to_handle 341
217 #  endif
218 #endif
219
220 #ifndef HAVE_NAME_TO_HANDLE_AT
221
222 struct file_handle {
223         unsigned int handle_bytes;
224         int handle_type;
225         unsigned char f_handle[0];
226 };
227
228 static inline int name_to_handle_at(int fd, const char *name, struct file_handle *handle, int *mnt_id, int flags) {
229         return syscall(__NR_name_to_handle_at, fd, name, handle, mnt_id, flags);
230 }
231 #endif