]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/missing.h
util: pass original flags value to mkostemp(), in open_tmpfile()
[thirdparty/systemd.git] / src / shared / missing.h
CommitLineData
03467c88 1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
15ae422b 2
c2f1db8f 3#pragma once
b9f880f4 4
15ae422b
LP
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
5430f7f2
LP
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
15ae422b
LP
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
5430f7f2 18 Lesser General Public License for more details.
15ae422b 19
5430f7f2 20 You should have received a copy of the GNU Lesser General Public License
15ae422b
LP
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
b9f880f4
LP
24/* Missing glibc definitions to access certain kernel APIs */
25
26#include <sys/resource.h>
15ae422b 27#include <sys/syscall.h>
16c42ce1 28#include <fcntl.h>
4db17f29 29#include <stdlib.h>
82c121a4 30#include <unistd.h>
dd6c17b1 31#include <linux/oom.h>
118ecf32 32#include <linux/input.h>
dd6c17b1
LP
33
34#ifdef HAVE_AUDIT
35#include <libaudit.h>
36#endif
b9f880f4 37
ad780f19
LP
38#include "macro.h"
39
d59d0a2b 40#ifdef ARCH_MIPS
41#include <asm/sgidefs.h>
42#endif
43
b9f880f4
LP
44#ifndef RLIMIT_RTTIME
45#define RLIMIT_RTTIME 15
46#endif
47
4fd5948e
LP
48#ifndef F_LINUX_SPECIFIC_BASE
49#define F_LINUX_SPECIFIC_BASE 1024
50#endif
51
52#ifndef F_SETPIPE_SZ
53#define F_SETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 7)
54#endif
55
56#ifndef F_GETPIPE_SZ
57#define F_GETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 8)
58#endif
59
16c42ce1
KS
60#ifndef IP_FREEBIND
61#define IP_FREEBIND 15
62#endif
63
dd6c17b1
LP
64#ifndef OOM_SCORE_ADJ_MIN
65#define OOM_SCORE_ADJ_MIN (-1000)
66#endif
67
68#ifndef OOM_SCORE_ADJ_MAX
69#define OOM_SCORE_ADJ_MAX 1000
70#endif
15ae422b 71
4927fcae 72#ifndef AUDIT_SERVICE_START
dd6c17b1 73#define AUDIT_SERVICE_START 1130 /* Service (daemon) start */
4927fcae
LP
74#endif
75
76#ifndef AUDIT_SERVICE_STOP
dd6c17b1 77#define AUDIT_SERVICE_STOP 1131 /* Service (daemon) stop */
4927fcae
LP
78#endif
79
6ea832a2
LP
80#ifndef TIOCVHANGUP
81#define TIOCVHANGUP 0x5437
82#endif
83
b90865ba
KS
84#ifndef IP_TRANSPARENT
85#define IP_TRANSPARENT 19
86#endif
87
a8348796 88#if !HAVE_DECL_PIVOT_ROOT
dd6c17b1
LP
89static inline int pivot_root(const char *new_root, const char *put_old) {
90 return syscall(SYS_pivot_root, new_root, put_old);
91}
a8348796 92#endif
dd6c17b1 93
22be093f 94#ifdef __x86_64__
d59d0a2b 95# ifndef __NR_fanotify_init
96# define __NR_fanotify_init 300
97# endif
98# ifndef __NR_fanotify_mark
99# define __NR_fanotify_mark 301
100# endif
101#elif defined _MIPS_SIM
102# if _MIPS_SIM == _MIPS_SIM_ABI32
103# ifndef __NR_fanotify_init
104# define __NR_fanotify_init 4336
105# endif
106# ifndef __NR_fanotify_mark
107# define __NR_fanotify_mark 4337
108# endif
109# elif _MIPS_SIM == _MIPS_SIM_NABI32
110# ifndef __NR_fanotify_init
111# define __NR_fanotify_init 6300
112# endif
113# ifndef __NR_fanotify_mark
114# define __NR_fanotify_mark 6301
115# endif
116# elif _MIPS_SIM == _MIPS_SIM_ABI64
117# ifndef __NR_fanotify_init
118# define __NR_fanotify_init 5295
119# endif
120# ifndef __NR_fanotify_mark
121# define __NR_fanotify_mark 5296
122# endif
123# endif
22be093f 124#else
d59d0a2b 125# ifndef __NR_fanotify_init
126# define __NR_fanotify_init 338
127# endif
128# ifndef __NR_fanotify_mark
129# define __NR_fanotify_mark 339
130# endif
22be093f
LP
131#endif
132
a8348796 133#ifndef HAVE_FANOTIFY_INIT
22be093f 134static inline int fanotify_init(unsigned int flags, unsigned int event_f_flags) {
05115020 135 return syscall(__NR_fanotify_init, flags, event_f_flags);
22be093f 136}
a8348796 137#endif
22be093f 138
a8348796 139#ifndef HAVE_FANOTIFY_MARK
05115020 140static inline int fanotify_mark(int fanotify_fd, unsigned int flags, uint64_t mask,
22be093f 141 int dfd, const char *pathname) {
28f30cf2 142#if defined _MIPS_SIM && _MIPS_SIM == _MIPS_SIM_ABI32 || defined __powerpc__ && !defined __powerpc64__ \
e9c1ea9d 143 || defined __arm__ && !defined __aarch64__
373c23b2 144 union {
145 uint64_t _64;
146 uint32_t _32[2];
147 } _mask;
148 _mask._64 = mask;
149
150 return syscall(__NR_fanotify_mark, fanotify_fd, flags,
151 _mask._32[0], _mask._32[1], dfd, pathname);
152#else
05115020 153 return syscall(__NR_fanotify_mark, fanotify_fd, flags, mask, dfd, pathname);
373c23b2 154#endif
22be093f 155}
a8348796 156#endif
22be093f 157
4b357e15
MM
158#ifndef BTRFS_IOCTL_MAGIC
159#define BTRFS_IOCTL_MAGIC 0x94
160#endif
161
162#ifndef BTRFS_PATH_NAME_MAX
163#define BTRFS_PATH_NAME_MAX 4087
164#endif
165
166#ifndef BTRFS_DEVICE_PATH_NAME_MAX
167#define BTRFS_DEVICE_PATH_NAME_MAX 1024
168#endif
169
170#ifndef BTRFS_FSID_SIZE
171#define BTRFS_FSID_SIZE 16
172#endif
173
174#ifndef BTRFS_UUID_SIZE
175#define BTRFS_UUID_SIZE 16
176#endif
177
178#ifndef HAVE_LINUX_BTRFS_H
179struct btrfs_ioctl_vol_args {
180 int64_t fd;
181 char name[BTRFS_PATH_NAME_MAX + 1];
182};
183
184struct btrfs_ioctl_dev_info_args {
185 uint64_t devid; /* in/out */
186 uint8_t uuid[BTRFS_UUID_SIZE]; /* in/out */
187 uint64_t bytes_used; /* out */
188 uint64_t total_bytes; /* out */
189 uint64_t unused[379]; /* pad to 4k */
190 char path[BTRFS_DEVICE_PATH_NAME_MAX]; /* out */
191};
192
193struct btrfs_ioctl_fs_info_args {
194 uint64_t max_id; /* out */
195 uint64_t num_devices; /* out */
196 uint8_t fsid[BTRFS_FSID_SIZE]; /* out */
197 uint64_t reserved[124]; /* pad to 1k */
198};
199#endif
200
201#ifndef BTRFS_IOC_DEFRAG
202#define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, struct btrfs_ioctl_vol_args)
203#endif
204
205#ifndef BTRFS_IOC_DEV_INFO
206#define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \
207 struct btrfs_ioctl_dev_info_args)
208#endif
209
210#ifndef BTRFS_IOC_FS_INFO
211#define BTRFS_IOC_FS_INFO _IOR(BTRFS_IOCTL_MAGIC, 31, \
212 struct btrfs_ioctl_fs_info_args)
213#endif
214
746f8906
LP
215#ifndef BTRFS_SUPER_MAGIC
216#define BTRFS_SUPER_MAGIC 0x9123683E
217#endif
218
94d82985
LP
219#ifndef MS_MOVE
220#define MS_MOVE 8192
221#endif
222
7cb1094a
HH
223#ifndef MS_PRIVATE
224#define MS_PRIVATE (1 << 18)
225#endif
226
a8348796 227#if !HAVE_DECL_GETTID
4d14be09
LP
228static inline pid_t gettid(void) {
229 return (pid_t) syscall(SYS_gettid);
230}
a8348796 231#endif
4d14be09 232
54ecda32
LP
233#ifndef SCM_SECURITY
234#define SCM_SECURITY 0x03
235#endif
236
48ac500b
LP
237#ifndef MS_STRICTATIME
238#define MS_STRICTATIME (1<<24)
239#endif
240
a9621528
AM
241#ifndef MS_REC
242#define MS_REC 16384
243#endif
244
245#ifndef MS_SHARED
246#define MS_SHARED (1<<20)
247#endif
248
8351ceae
LP
249#ifndef PR_SET_NO_NEW_PRIVS
250#define PR_SET_NO_NEW_PRIVS 38
251#endif
d4447f4d
AK
252
253#ifndef PR_SET_CHILD_SUBREAPER
254#define PR_SET_CHILD_SUBREAPER 36
255#endif
a8348796
LP
256
257#ifndef MAX_HANDLE_SZ
258#define MAX_HANDLE_SZ 128
259#endif
260
f527b6b8 261#if defined __x86_64__
848af055
ED
262# ifndef __NR_name_to_handle_at
263# define __NR_name_to_handle_at 303
a8348796 264# endif
f527b6b8 265#elif defined __i386__
848af055
ED
266# ifndef __NR_name_to_handle_at
267# define __NR_name_to_handle_at 341
a8348796 268# endif
f527b6b8
MO
269#elif defined __arm__
270# ifndef __NR_name_to_handle_at
271# define __NR_name_to_handle_at 370
272# endif
273#elif defined __powerpc__
274# ifndef __NR_name_to_handle_at
275# define __NR_name_to_handle_at 345
276# endif
277#else
278# ifndef __NR_name_to_handle_at
279# error __NR_name_to_handle_at is not defined
280# endif
a8348796
LP
281#endif
282
9388e99e 283#if !HAVE_DECL_NAME_TO_HANDLE_AT
a8348796
LP
284struct file_handle {
285 unsigned int handle_bytes;
286 int handle_type;
287 unsigned char f_handle[0];
288};
289
290static inline int name_to_handle_at(int fd, const char *name, struct file_handle *handle, int *mnt_id, int flags) {
291 return syscall(__NR_name_to_handle_at, fd, name, handle, mnt_id, flags);
292}
293#endif
4db17f29
ZJS
294
295#ifndef HAVE_SECURE_GETENV
296# ifdef HAVE___SECURE_GETENV
297# define secure_getenv __secure_getenv
298# else
299# error neither secure_getenv nor __secure_getenv are available
300# endif
301#endif
85210bff
LP
302
303#ifndef CIFS_MAGIC_NUMBER
65b3903f 304# define CIFS_MAGIC_NUMBER 0xFF534D42
85210bff 305#endif
8742514c
LP
306
307#ifndef TFD_TIMER_CANCEL_ON_SET
65b3903f 308# define TFD_TIMER_CANCEL_ON_SET (1 << 1)
8742514c 309#endif
f7db7a69
SL
310
311#ifndef SO_REUSEPORT
65b3903f 312# define SO_REUSEPORT 15
f7db7a69 313#endif
118ecf32
DH
314
315#ifndef EVIOCREVOKE
65b3903f 316# define EVIOCREVOKE _IOW('E', 0x91, int)
118ecf32
DH
317#endif
318
319#ifndef DRM_IOCTL_SET_MASTER
65b3903f 320# define DRM_IOCTL_SET_MASTER _IO('d', 0x1e)
118ecf32
DH
321#endif
322
323#ifndef DRM_IOCTL_DROP_MASTER
65b3903f
ZJS
324# define DRM_IOCTL_DROP_MASTER _IO('d', 0x1f)
325#endif
326
327#ifndef TMP_MAX
328# define TMP_MAX 238328
118ecf32 329#endif