1*49cdfc7eSAndroid Build Coastguard Worker // SPDX-License-Identifier: GPL-2.0-or-later 2*49cdfc7eSAndroid Build Coastguard Worker /* 3*49cdfc7eSAndroid Build Coastguard Worker * Copyright (c) 2014 Cyril Hrubis <[email protected]> 4*49cdfc7eSAndroid Build Coastguard Worker * Copyright (c) Linux Test Project, 2014-2023 5*49cdfc7eSAndroid Build Coastguard Worker */ 6*49cdfc7eSAndroid Build Coastguard Worker 7*49cdfc7eSAndroid Build Coastguard Worker #ifndef LAPI_FCNTL_H__ 8*49cdfc7eSAndroid Build Coastguard Worker #define LAPI_FCNTL_H__ 9*49cdfc7eSAndroid Build Coastguard Worker 10*49cdfc7eSAndroid Build Coastguard Worker #include "config.h" 11*49cdfc7eSAndroid Build Coastguard Worker #include <fcntl.h> 12*49cdfc7eSAndroid Build Coastguard Worker #include <sys/socket.h> 13*49cdfc7eSAndroid Build Coastguard Worker 14*49cdfc7eSAndroid Build Coastguard Worker /* NOTE: #define _GNU_SOURCE if you need O_DIRECT in tests */ 15*49cdfc7eSAndroid Build Coastguard Worker 16*49cdfc7eSAndroid Build Coastguard Worker #ifndef O_CLOEXEC 17*49cdfc7eSAndroid Build Coastguard Worker # define O_CLOEXEC 02000000 18*49cdfc7eSAndroid Build Coastguard Worker #endif 19*49cdfc7eSAndroid Build Coastguard Worker 20*49cdfc7eSAndroid Build Coastguard Worker #ifndef SOCK_CLOEXEC 21*49cdfc7eSAndroid Build Coastguard Worker # define SOCK_CLOEXEC O_CLOEXEC 22*49cdfc7eSAndroid Build Coastguard Worker #endif 23*49cdfc7eSAndroid Build Coastguard Worker 24*49cdfc7eSAndroid Build Coastguard Worker #ifndef SOCK_NONBLOCK 25*49cdfc7eSAndroid Build Coastguard Worker # define SOCK_NONBLOCK O_NONBLOCK 26*49cdfc7eSAndroid Build Coastguard Worker #endif 27*49cdfc7eSAndroid Build Coastguard Worker 28*49cdfc7eSAndroid Build Coastguard Worker #ifndef O_TMPFILE 29*49cdfc7eSAndroid Build Coastguard Worker # define O_TMPFILE (020000000 | O_DIRECTORY) 30*49cdfc7eSAndroid Build Coastguard Worker #endif 31*49cdfc7eSAndroid Build Coastguard Worker 32*49cdfc7eSAndroid Build Coastguard Worker #ifndef F_DUPFD_CLOEXEC 33*49cdfc7eSAndroid Build Coastguard Worker # define F_DUPFD_CLOEXEC 1030 34*49cdfc7eSAndroid Build Coastguard Worker #endif 35*49cdfc7eSAndroid Build Coastguard Worker 36*49cdfc7eSAndroid Build Coastguard Worker #ifndef F_SETPIPE_SZ 37*49cdfc7eSAndroid Build Coastguard Worker # define F_SETPIPE_SZ 1031 38*49cdfc7eSAndroid Build Coastguard Worker #endif 39*49cdfc7eSAndroid Build Coastguard Worker 40*49cdfc7eSAndroid Build Coastguard Worker #ifndef F_GETPIPE_SZ 41*49cdfc7eSAndroid Build Coastguard Worker # define F_GETPIPE_SZ 1032 42*49cdfc7eSAndroid Build Coastguard Worker #endif 43*49cdfc7eSAndroid Build Coastguard Worker 44*49cdfc7eSAndroid Build Coastguard Worker /* 45*49cdfc7eSAndroid Build Coastguard Worker * Set/Get seals 46*49cdfc7eSAndroid Build Coastguard Worker */ 47*49cdfc7eSAndroid Build Coastguard Worker #ifndef F_ADD_SEALS 48*49cdfc7eSAndroid Build Coastguard Worker # define F_ADD_SEALS (1033) 49*49cdfc7eSAndroid Build Coastguard Worker #endif 50*49cdfc7eSAndroid Build Coastguard Worker 51*49cdfc7eSAndroid Build Coastguard Worker #ifndef F_GET_SEALS 52*49cdfc7eSAndroid Build Coastguard Worker # define F_GET_SEALS (1034) 53*49cdfc7eSAndroid Build Coastguard Worker #endif 54*49cdfc7eSAndroid Build Coastguard Worker 55*49cdfc7eSAndroid Build Coastguard Worker #ifndef F_SEAL_SEAL 56*49cdfc7eSAndroid Build Coastguard Worker # define F_SEAL_SEAL 0x0001 /* prevent further seals from being set */ 57*49cdfc7eSAndroid Build Coastguard Worker #endif 58*49cdfc7eSAndroid Build Coastguard Worker 59*49cdfc7eSAndroid Build Coastguard Worker #ifndef F_SEAL_SHRINK 60*49cdfc7eSAndroid Build Coastguard Worker # define F_SEAL_SHRINK 0x0002 /* prevent file from shrinking */ 61*49cdfc7eSAndroid Build Coastguard Worker #endif 62*49cdfc7eSAndroid Build Coastguard Worker #ifndef F_SEAL_GROW 63*49cdfc7eSAndroid Build Coastguard Worker # define F_SEAL_GROW 0x0004 /* prevent file from growing */ 64*49cdfc7eSAndroid Build Coastguard Worker #endif 65*49cdfc7eSAndroid Build Coastguard Worker #ifndef F_SEAL_WRITE 66*49cdfc7eSAndroid Build Coastguard Worker # define F_SEAL_WRITE 0x0008 /* prevent writes */ 67*49cdfc7eSAndroid Build Coastguard Worker #endif 68*49cdfc7eSAndroid Build Coastguard Worker 69*49cdfc7eSAndroid Build Coastguard Worker #ifndef F_OWNER_PGRP 70*49cdfc7eSAndroid Build Coastguard Worker # define F_OWNER_PGRP 2 71*49cdfc7eSAndroid Build Coastguard Worker #endif 72*49cdfc7eSAndroid Build Coastguard Worker 73*49cdfc7eSAndroid Build Coastguard Worker #ifndef F_OFD_GETLK 74*49cdfc7eSAndroid Build Coastguard Worker # define F_OFD_GETLK 36 75*49cdfc7eSAndroid Build Coastguard Worker #endif 76*49cdfc7eSAndroid Build Coastguard Worker 77*49cdfc7eSAndroid Build Coastguard Worker #ifndef F_OFD_SETLK 78*49cdfc7eSAndroid Build Coastguard Worker # define F_OFD_SETLK 37 79*49cdfc7eSAndroid Build Coastguard Worker #endif 80*49cdfc7eSAndroid Build Coastguard Worker 81*49cdfc7eSAndroid Build Coastguard Worker #ifndef F_OFD_SETLKW 82*49cdfc7eSAndroid Build Coastguard Worker # define F_OFD_SETLKW 38 83*49cdfc7eSAndroid Build Coastguard Worker #endif 84*49cdfc7eSAndroid Build Coastguard Worker 85*49cdfc7eSAndroid Build Coastguard Worker #ifndef AT_FDCWD 86*49cdfc7eSAndroid Build Coastguard Worker # define AT_FDCWD -100 87*49cdfc7eSAndroid Build Coastguard Worker #endif 88*49cdfc7eSAndroid Build Coastguard Worker 89*49cdfc7eSAndroid Build Coastguard Worker #ifndef AT_SYMLINK_NOFOLLOW 90*49cdfc7eSAndroid Build Coastguard Worker # define AT_SYMLINK_NOFOLLOW 0x100 91*49cdfc7eSAndroid Build Coastguard Worker #endif 92*49cdfc7eSAndroid Build Coastguard Worker 93*49cdfc7eSAndroid Build Coastguard Worker #ifndef AT_REMOVEDIR 94*49cdfc7eSAndroid Build Coastguard Worker # define AT_REMOVEDIR 0x200 95*49cdfc7eSAndroid Build Coastguard Worker #endif 96*49cdfc7eSAndroid Build Coastguard Worker 97*49cdfc7eSAndroid Build Coastguard Worker #ifndef AT_HANDLE_FID 98*49cdfc7eSAndroid Build Coastguard Worker # define AT_HANDLE_FID AT_REMOVEDIR 99*49cdfc7eSAndroid Build Coastguard Worker #endif 100*49cdfc7eSAndroid Build Coastguard Worker 101*49cdfc7eSAndroid Build Coastguard Worker #ifndef AT_SYMLINK_FOLLOW 102*49cdfc7eSAndroid Build Coastguard Worker # define AT_SYMLINK_FOLLOW 0x400 103*49cdfc7eSAndroid Build Coastguard Worker #endif 104*49cdfc7eSAndroid Build Coastguard Worker 105*49cdfc7eSAndroid Build Coastguard Worker #ifndef AT_NO_AUTOMOUNT 106*49cdfc7eSAndroid Build Coastguard Worker # define AT_NO_AUTOMOUNT 0x800 107*49cdfc7eSAndroid Build Coastguard Worker #endif 108*49cdfc7eSAndroid Build Coastguard Worker 109*49cdfc7eSAndroid Build Coastguard Worker #ifndef AT_EMPTY_PATH 110*49cdfc7eSAndroid Build Coastguard Worker # define AT_EMPTY_PATH 0x1000 111*49cdfc7eSAndroid Build Coastguard Worker #endif 112*49cdfc7eSAndroid Build Coastguard Worker 113*49cdfc7eSAndroid Build Coastguard Worker #ifndef AT_STATX_SYNC_AS_STAT 114*49cdfc7eSAndroid Build Coastguard Worker # define AT_STATX_SYNC_AS_STAT 0x0000 115*49cdfc7eSAndroid Build Coastguard Worker #endif 116*49cdfc7eSAndroid Build Coastguard Worker 117*49cdfc7eSAndroid Build Coastguard Worker #ifndef AT_STATX_FORCE_SYNC 118*49cdfc7eSAndroid Build Coastguard Worker # define AT_STATX_FORCE_SYNC 0x2000 119*49cdfc7eSAndroid Build Coastguard Worker #endif 120*49cdfc7eSAndroid Build Coastguard Worker 121*49cdfc7eSAndroid Build Coastguard Worker #ifndef AT_STATX_DONT_SYNC 122*49cdfc7eSAndroid Build Coastguard Worker # define AT_STATX_DONT_SYNC 0x4000 123*49cdfc7eSAndroid Build Coastguard Worker #endif 124*49cdfc7eSAndroid Build Coastguard Worker 125*49cdfc7eSAndroid Build Coastguard Worker #ifndef AT_STATX_SYNC_TYPE 126*49cdfc7eSAndroid Build Coastguard Worker # define AT_STATX_SYNC_TYPE 0x6000 127*49cdfc7eSAndroid Build Coastguard Worker #endif 128*49cdfc7eSAndroid Build Coastguard Worker 129*49cdfc7eSAndroid Build Coastguard Worker #ifndef O_NOATIME 130*49cdfc7eSAndroid Build Coastguard Worker # define O_NOATIME 01000000 131*49cdfc7eSAndroid Build Coastguard Worker #endif 132*49cdfc7eSAndroid Build Coastguard Worker 133*49cdfc7eSAndroid Build Coastguard Worker #ifndef O_PATH 134*49cdfc7eSAndroid Build Coastguard Worker # ifdef __sparc__ 135*49cdfc7eSAndroid Build Coastguard Worker # define O_PATH 0x1000000 136*49cdfc7eSAndroid Build Coastguard Worker # else 137*49cdfc7eSAndroid Build Coastguard Worker # define O_PATH 010000000 138*49cdfc7eSAndroid Build Coastguard Worker # endif 139*49cdfc7eSAndroid Build Coastguard Worker #endif 140*49cdfc7eSAndroid Build Coastguard Worker 141*49cdfc7eSAndroid Build Coastguard Worker #ifndef FALLOC_FL_KEEP_SIZE 142*49cdfc7eSAndroid Build Coastguard Worker # define FALLOC_FL_KEEP_SIZE 1 143*49cdfc7eSAndroid Build Coastguard Worker #endif 144*49cdfc7eSAndroid Build Coastguard Worker 145*49cdfc7eSAndroid Build Coastguard Worker #ifndef RENAME_NOREPLACE 146*49cdfc7eSAndroid Build Coastguard Worker # define RENAME_NOREPLACE (1 << 0) 147*49cdfc7eSAndroid Build Coastguard Worker #endif 148*49cdfc7eSAndroid Build Coastguard Worker 149*49cdfc7eSAndroid Build Coastguard Worker #ifndef RENAME_EXCHANGE 150*49cdfc7eSAndroid Build Coastguard Worker # define RENAME_EXCHANGE (1 << 1) 151*49cdfc7eSAndroid Build Coastguard Worker #endif 152*49cdfc7eSAndroid Build Coastguard Worker 153*49cdfc7eSAndroid Build Coastguard Worker #ifndef RENAME_WHITEOUT 154*49cdfc7eSAndroid Build Coastguard Worker # define RENAME_WHITEOUT (1 << 2) 155*49cdfc7eSAndroid Build Coastguard Worker #endif 156*49cdfc7eSAndroid Build Coastguard Worker 157*49cdfc7eSAndroid Build Coastguard Worker /* splice, vmsplice, tee */ 158*49cdfc7eSAndroid Build Coastguard Worker 159*49cdfc7eSAndroid Build Coastguard Worker #ifndef SPLICE_F_NONBLOCK 160*49cdfc7eSAndroid Build Coastguard Worker # define SPLICE_F_NONBLOCK 2 161*49cdfc7eSAndroid Build Coastguard Worker #endif 162*49cdfc7eSAndroid Build Coastguard Worker 163*49cdfc7eSAndroid Build Coastguard Worker #ifndef MAX_HANDLE_SZ 164*49cdfc7eSAndroid Build Coastguard Worker # define MAX_HANDLE_SZ 128 165*49cdfc7eSAndroid Build Coastguard Worker #endif 166*49cdfc7eSAndroid Build Coastguard Worker 167*49cdfc7eSAndroid Build Coastguard Worker #define TST_OPEN_NEEDS_MODE(oflag) \ 168*49cdfc7eSAndroid Build Coastguard Worker (((oflag) & O_CREAT) != 0 || ((oflag) & O_TMPFILE) == O_TMPFILE) 169*49cdfc7eSAndroid Build Coastguard Worker 170*49cdfc7eSAndroid Build Coastguard Worker #ifndef HAVE_STRUCT_FILE_HANDLE 171*49cdfc7eSAndroid Build Coastguard Worker struct file_handle { 172*49cdfc7eSAndroid Build Coastguard Worker unsigned int handle_bytes; 173*49cdfc7eSAndroid Build Coastguard Worker int handle_type; 174*49cdfc7eSAndroid Build Coastguard Worker /* File identifier. */ 175*49cdfc7eSAndroid Build Coastguard Worker unsigned char f_handle[0]; 176*49cdfc7eSAndroid Build Coastguard Worker }; 177*49cdfc7eSAndroid Build Coastguard Worker #endif /* HAVE_STRUCT_FILE_HANDLE */ 178*49cdfc7eSAndroid Build Coastguard Worker 179*49cdfc7eSAndroid Build Coastguard Worker #endif /* LAPI_FCNTL_H__ */ 180