1*8d67ca89SAndroid Build Coastguard Worker /* 2*8d67ca89SAndroid Build Coastguard Worker * Copyright (C) 2008 The Android Open Source Project 3*8d67ca89SAndroid Build Coastguard Worker * All rights reserved. 4*8d67ca89SAndroid Build Coastguard Worker * 5*8d67ca89SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 6*8d67ca89SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 7*8d67ca89SAndroid Build Coastguard Worker * are met: 8*8d67ca89SAndroid Build Coastguard Worker * * Redistributions of source code must retain the above copyright 9*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 10*8d67ca89SAndroid Build Coastguard Worker * * Redistributions in binary form must reproduce the above copyright 11*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in 12*8d67ca89SAndroid Build Coastguard Worker * the documentation and/or other materials provided with the 13*8d67ca89SAndroid Build Coastguard Worker * distribution. 14*8d67ca89SAndroid Build Coastguard Worker * 15*8d67ca89SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16*8d67ca89SAndroid Build Coastguard Worker * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17*8d67ca89SAndroid Build Coastguard Worker * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18*8d67ca89SAndroid Build Coastguard Worker * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19*8d67ca89SAndroid Build Coastguard Worker * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20*8d67ca89SAndroid Build Coastguard Worker * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21*8d67ca89SAndroid Build Coastguard Worker * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22*8d67ca89SAndroid Build Coastguard Worker * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23*8d67ca89SAndroid Build Coastguard Worker * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24*8d67ca89SAndroid Build Coastguard Worker * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25*8d67ca89SAndroid Build Coastguard Worker * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26*8d67ca89SAndroid Build Coastguard Worker * SUCH DAMAGE. 27*8d67ca89SAndroid Build Coastguard Worker */ 28*8d67ca89SAndroid Build Coastguard Worker 29*8d67ca89SAndroid Build Coastguard Worker #pragma once 30*8d67ca89SAndroid Build Coastguard Worker 31*8d67ca89SAndroid Build Coastguard Worker #include <sys/cdefs.h> 32*8d67ca89SAndroid Build Coastguard Worker 33*8d67ca89SAndroid Build Coastguard Worker #include <stddef.h> 34*8d67ca89SAndroid Build Coastguard Worker #include <sys/types.h> 35*8d67ca89SAndroid Build Coastguard Worker #include <sys/select.h> 36*8d67ca89SAndroid Build Coastguard Worker 37*8d67ca89SAndroid Build Coastguard Worker #include <bits/fcntl.h> 38*8d67ca89SAndroid Build Coastguard Worker #include <bits/getentropy.h> 39*8d67ca89SAndroid Build Coastguard Worker #include <bits/getopt.h> 40*8d67ca89SAndroid Build Coastguard Worker #include <bits/ioctl.h> 41*8d67ca89SAndroid Build Coastguard Worker #include <bits/lockf.h> 42*8d67ca89SAndroid Build Coastguard Worker #include <bits/posix_limits.h> 43*8d67ca89SAndroid Build Coastguard Worker #include <bits/seek_constants.h> 44*8d67ca89SAndroid Build Coastguard Worker #include <bits/sysconf.h> 45*8d67ca89SAndroid Build Coastguard Worker 46*8d67ca89SAndroid Build Coastguard Worker __BEGIN_DECLS 47*8d67ca89SAndroid Build Coastguard Worker 48*8d67ca89SAndroid Build Coastguard Worker #define STDIN_FILENO 0 49*8d67ca89SAndroid Build Coastguard Worker #define STDOUT_FILENO 1 50*8d67ca89SAndroid Build Coastguard Worker #define STDERR_FILENO 2 51*8d67ca89SAndroid Build Coastguard Worker 52*8d67ca89SAndroid Build Coastguard Worker #define F_OK 0 53*8d67ca89SAndroid Build Coastguard Worker #define X_OK 1 54*8d67ca89SAndroid Build Coastguard Worker #define W_OK 2 55*8d67ca89SAndroid Build Coastguard Worker #define R_OK 4 56*8d67ca89SAndroid Build Coastguard Worker 57*8d67ca89SAndroid Build Coastguard Worker #define _PC_FILESIZEBITS 0 58*8d67ca89SAndroid Build Coastguard Worker #define _PC_LINK_MAX 1 59*8d67ca89SAndroid Build Coastguard Worker #define _PC_MAX_CANON 2 60*8d67ca89SAndroid Build Coastguard Worker #define _PC_MAX_INPUT 3 61*8d67ca89SAndroid Build Coastguard Worker #define _PC_NAME_MAX 4 62*8d67ca89SAndroid Build Coastguard Worker #define _PC_PATH_MAX 5 63*8d67ca89SAndroid Build Coastguard Worker #define _PC_PIPE_BUF 6 64*8d67ca89SAndroid Build Coastguard Worker #define _PC_2_SYMLINKS 7 65*8d67ca89SAndroid Build Coastguard Worker #define _PC_ALLOC_SIZE_MIN 8 66*8d67ca89SAndroid Build Coastguard Worker #define _PC_REC_INCR_XFER_SIZE 9 67*8d67ca89SAndroid Build Coastguard Worker #define _PC_REC_MAX_XFER_SIZE 10 68*8d67ca89SAndroid Build Coastguard Worker #define _PC_REC_MIN_XFER_SIZE 11 69*8d67ca89SAndroid Build Coastguard Worker #define _PC_REC_XFER_ALIGN 12 70*8d67ca89SAndroid Build Coastguard Worker #define _PC_SYMLINK_MAX 13 71*8d67ca89SAndroid Build Coastguard Worker #define _PC_CHOWN_RESTRICTED 14 72*8d67ca89SAndroid Build Coastguard Worker #define _PC_NO_TRUNC 15 73*8d67ca89SAndroid Build Coastguard Worker #define _PC_VDISABLE 16 74*8d67ca89SAndroid Build Coastguard Worker #define _PC_ASYNC_IO 17 75*8d67ca89SAndroid Build Coastguard Worker #define _PC_PRIO_IO 18 76*8d67ca89SAndroid Build Coastguard Worker #define _PC_SYNC_IO 19 77*8d67ca89SAndroid Build Coastguard Worker 78*8d67ca89SAndroid Build Coastguard Worker extern char* _Nullable * _Nullable environ; 79*8d67ca89SAndroid Build Coastguard Worker 80*8d67ca89SAndroid Build Coastguard Worker __noreturn void _exit(int __status); 81*8d67ca89SAndroid Build Coastguard Worker 82*8d67ca89SAndroid Build Coastguard Worker /** 83*8d67ca89SAndroid Build Coastguard Worker * [fork(2)](https://man7.org/linux/man-pages/man2/fork.2.html) creates a new 84*8d67ca89SAndroid Build Coastguard Worker * process. fork() runs any handlers set by pthread_atfork(). 85*8d67ca89SAndroid Build Coastguard Worker * 86*8d67ca89SAndroid Build Coastguard Worker * Returns 0 in the child, the pid of the child in the parent, 87*8d67ca89SAndroid Build Coastguard Worker * and returns -1 and sets `errno` on failure. 88*8d67ca89SAndroid Build Coastguard Worker */ 89*8d67ca89SAndroid Build Coastguard Worker pid_t fork(void); 90*8d67ca89SAndroid Build Coastguard Worker 91*8d67ca89SAndroid Build Coastguard Worker /** 92*8d67ca89SAndroid Build Coastguard Worker * _Fork() creates a new process. _Fork() differs from fork() in that it does 93*8d67ca89SAndroid Build Coastguard Worker * not run any handlers set by pthread_atfork(). In addition to any user-defined 94*8d67ca89SAndroid Build Coastguard Worker * ones, bionic uses pthread_atfork() handlers to ensure consistency of its own 95*8d67ca89SAndroid Build Coastguard Worker * state, so the child should only call 96*8d67ca89SAndroid Build Coastguard Worker * [POSIX async-safe](https://man7.org/linux/man-pages/man7/signal-safety.7.html) 97*8d67ca89SAndroid Build Coastguard Worker * functions. 98*8d67ca89SAndroid Build Coastguard Worker * 99*8d67ca89SAndroid Build Coastguard Worker * Returns 0 in the child, the pid of the child in the parent, 100*8d67ca89SAndroid Build Coastguard Worker * and returns -1 and sets `errno` on failure. 101*8d67ca89SAndroid Build Coastguard Worker * 102*8d67ca89SAndroid Build Coastguard Worker * Available since API level 35. 103*8d67ca89SAndroid Build Coastguard Worker */ 104*8d67ca89SAndroid Build Coastguard Worker 105*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(35) 106*8d67ca89SAndroid Build Coastguard Worker pid_t _Fork(void) __INTRODUCED_IN(35); 107*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(35) */ 108*8d67ca89SAndroid Build Coastguard Worker 109*8d67ca89SAndroid Build Coastguard Worker 110*8d67ca89SAndroid Build Coastguard Worker /** 111*8d67ca89SAndroid Build Coastguard Worker * [vfork(2)](https://man7.org/linux/man-pages/man2/vfork.2.html) creates a new 112*8d67ca89SAndroid Build Coastguard Worker * process. vfork() differs from fork() in that it does not run any handlers 113*8d67ca89SAndroid Build Coastguard Worker * set by pthread_atfork(), and the parent is suspended until the child calls 114*8d67ca89SAndroid Build Coastguard Worker * exec() or exits. 115*8d67ca89SAndroid Build Coastguard Worker * 116*8d67ca89SAndroid Build Coastguard Worker * Returns 0 in the child, the pid of the child in the parent, 117*8d67ca89SAndroid Build Coastguard Worker * and returns -1 and sets `errno` on failure. 118*8d67ca89SAndroid Build Coastguard Worker */ 119*8d67ca89SAndroid Build Coastguard Worker pid_t vfork(void) __returns_twice; 120*8d67ca89SAndroid Build Coastguard Worker 121*8d67ca89SAndroid Build Coastguard Worker /** 122*8d67ca89SAndroid Build Coastguard Worker * [getpid(2)](https://man7.org/linux/man-pages/man2/getpid.2.html) returns 123*8d67ca89SAndroid Build Coastguard Worker * the caller's process ID. 124*8d67ca89SAndroid Build Coastguard Worker * 125*8d67ca89SAndroid Build Coastguard Worker * Returns the caller's process ID. 126*8d67ca89SAndroid Build Coastguard Worker */ 127*8d67ca89SAndroid Build Coastguard Worker pid_t getpid(void); 128*8d67ca89SAndroid Build Coastguard Worker 129*8d67ca89SAndroid Build Coastguard Worker /** 130*8d67ca89SAndroid Build Coastguard Worker * [gettid(2)](https://man7.org/linux/man-pages/man2/gettid.2.html) returns 131*8d67ca89SAndroid Build Coastguard Worker * the caller's thread ID. 132*8d67ca89SAndroid Build Coastguard Worker * 133*8d67ca89SAndroid Build Coastguard Worker * Returns the caller's thread ID. 134*8d67ca89SAndroid Build Coastguard Worker */ 135*8d67ca89SAndroid Build Coastguard Worker pid_t gettid(void); 136*8d67ca89SAndroid Build Coastguard Worker 137*8d67ca89SAndroid Build Coastguard Worker pid_t getpgid(pid_t __pid); 138*8d67ca89SAndroid Build Coastguard Worker int setpgid(pid_t __pid, pid_t __pgid); 139*8d67ca89SAndroid Build Coastguard Worker pid_t getppid(void); 140*8d67ca89SAndroid Build Coastguard Worker pid_t getpgrp(void); 141*8d67ca89SAndroid Build Coastguard Worker int setpgrp(void); 142*8d67ca89SAndroid Build Coastguard Worker pid_t getsid(pid_t __pid); 143*8d67ca89SAndroid Build Coastguard Worker pid_t setsid(void); 144*8d67ca89SAndroid Build Coastguard Worker 145*8d67ca89SAndroid Build Coastguard Worker int execv(const char* _Nonnull __path, char* _Nullable const* _Nullable __argv); 146*8d67ca89SAndroid Build Coastguard Worker int execvp(const char* _Nonnull __file, char* _Nullable const* _Nullable __argv); 147*8d67ca89SAndroid Build Coastguard Worker int execvpe(const char* _Nonnull __file, char* _Nullable const* _Nullable __argv, char* _Nullable const* _Nullable __envp); 148*8d67ca89SAndroid Build Coastguard Worker int execve(const char* _Nonnull __file, char* _Nullable const* _Nullable __argv, char* _Nullable const* _Nullable __envp); 149*8d67ca89SAndroid Build Coastguard Worker int execl(const char* _Nonnull __path, const char* _Nullable __arg0, ...) __attribute__((__sentinel__)); 150*8d67ca89SAndroid Build Coastguard Worker int execlp(const char* _Nonnull __file, const char* _Nullable __arg0, ...) __attribute__((__sentinel__)); 151*8d67ca89SAndroid Build Coastguard Worker int execle(const char* _Nonnull __path, const char* _Nullable __arg0, ... /*, char* const* __envp */) 152*8d67ca89SAndroid Build Coastguard Worker __attribute__((__sentinel__(1))); 153*8d67ca89SAndroid Build Coastguard Worker 154*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(28) 155*8d67ca89SAndroid Build Coastguard Worker int fexecve(int __fd, char* _Nullable const* _Nullable __argv, char* _Nullable const* _Nullable __envp) __INTRODUCED_IN(28); 156*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(28) */ 157*8d67ca89SAndroid Build Coastguard Worker 158*8d67ca89SAndroid Build Coastguard Worker 159*8d67ca89SAndroid Build Coastguard Worker int nice(int __incr); 160*8d67ca89SAndroid Build Coastguard Worker 161*8d67ca89SAndroid Build Coastguard Worker /** 162*8d67ca89SAndroid Build Coastguard Worker * [setegid(2)](https://man7.org/linux/man-pages/man2/setegid.2.html) sets 163*8d67ca89SAndroid Build Coastguard Worker * the effective group ID. 164*8d67ca89SAndroid Build Coastguard Worker * 165*8d67ca89SAndroid Build Coastguard Worker * On Android, this function only affects the calling thread, not all threads 166*8d67ca89SAndroid Build Coastguard Worker * in the process. 167*8d67ca89SAndroid Build Coastguard Worker * 168*8d67ca89SAndroid Build Coastguard Worker * Returns 0 on success, and returns -1 and sets `errno` on failure. 169*8d67ca89SAndroid Build Coastguard Worker */ 170*8d67ca89SAndroid Build Coastguard Worker int setegid(gid_t __gid); 171*8d67ca89SAndroid Build Coastguard Worker 172*8d67ca89SAndroid Build Coastguard Worker /** 173*8d67ca89SAndroid Build Coastguard Worker * [seteuid(2)](https://man7.org/linux/man-pages/man2/seteuid.2.html) sets 174*8d67ca89SAndroid Build Coastguard Worker * the effective user ID. 175*8d67ca89SAndroid Build Coastguard Worker * 176*8d67ca89SAndroid Build Coastguard Worker * On Android, this function only affects the calling thread, not all threads 177*8d67ca89SAndroid Build Coastguard Worker * in the process. 178*8d67ca89SAndroid Build Coastguard Worker * 179*8d67ca89SAndroid Build Coastguard Worker * Returns 0 on success, and returns -1 and sets `errno` on failure. 180*8d67ca89SAndroid Build Coastguard Worker */ 181*8d67ca89SAndroid Build Coastguard Worker int seteuid(uid_t __uid); 182*8d67ca89SAndroid Build Coastguard Worker 183*8d67ca89SAndroid Build Coastguard Worker /** 184*8d67ca89SAndroid Build Coastguard Worker * [setgid(2)](https://man7.org/linux/man-pages/man2/setgid.2.html) sets 185*8d67ca89SAndroid Build Coastguard Worker * the group ID. 186*8d67ca89SAndroid Build Coastguard Worker * 187*8d67ca89SAndroid Build Coastguard Worker * On Android, this function only affects the calling thread, not all threads 188*8d67ca89SAndroid Build Coastguard Worker * in the process. 189*8d67ca89SAndroid Build Coastguard Worker * 190*8d67ca89SAndroid Build Coastguard Worker * Returns 0 on success, and returns -1 and sets `errno` on failure. 191*8d67ca89SAndroid Build Coastguard Worker */ 192*8d67ca89SAndroid Build Coastguard Worker int setgid(gid_t __gid); 193*8d67ca89SAndroid Build Coastguard Worker 194*8d67ca89SAndroid Build Coastguard Worker /** 195*8d67ca89SAndroid Build Coastguard Worker * [setregid(2)](https://man7.org/linux/man-pages/man2/setregid.2.html) sets 196*8d67ca89SAndroid Build Coastguard Worker * the real and effective group IDs (use -1 to leave an ID unchanged). 197*8d67ca89SAndroid Build Coastguard Worker * 198*8d67ca89SAndroid Build Coastguard Worker * On Android, this function only affects the calling thread, not all threads 199*8d67ca89SAndroid Build Coastguard Worker * in the process. 200*8d67ca89SAndroid Build Coastguard Worker * 201*8d67ca89SAndroid Build Coastguard Worker * Returns 0 on success, and returns -1 and sets `errno` on failure. 202*8d67ca89SAndroid Build Coastguard Worker */ 203*8d67ca89SAndroid Build Coastguard Worker int setregid(gid_t __rgid, gid_t __egid); 204*8d67ca89SAndroid Build Coastguard Worker 205*8d67ca89SAndroid Build Coastguard Worker /** 206*8d67ca89SAndroid Build Coastguard Worker * [setresgid(2)](https://man7.org/linux/man-pages/man2/setresgid.2.html) sets 207*8d67ca89SAndroid Build Coastguard Worker * the real, effective, and saved group IDs (use -1 to leave an ID unchanged). 208*8d67ca89SAndroid Build Coastguard Worker * 209*8d67ca89SAndroid Build Coastguard Worker * On Android, this function only affects the calling thread, not all threads 210*8d67ca89SAndroid Build Coastguard Worker * in the process. 211*8d67ca89SAndroid Build Coastguard Worker * 212*8d67ca89SAndroid Build Coastguard Worker * Returns 0 on success, and returns -1 and sets `errno` on failure. 213*8d67ca89SAndroid Build Coastguard Worker */ 214*8d67ca89SAndroid Build Coastguard Worker int setresgid(gid_t __rgid, gid_t __egid, gid_t __sgid); 215*8d67ca89SAndroid Build Coastguard Worker 216*8d67ca89SAndroid Build Coastguard Worker /** 217*8d67ca89SAndroid Build Coastguard Worker * [setresuid(2)](https://man7.org/linux/man-pages/man2/setresuid.2.html) sets 218*8d67ca89SAndroid Build Coastguard Worker * the real, effective, and saved user IDs (use -1 to leave an ID unchanged). 219*8d67ca89SAndroid Build Coastguard Worker * 220*8d67ca89SAndroid Build Coastguard Worker * On Android, this function only affects the calling thread, not all threads 221*8d67ca89SAndroid Build Coastguard Worker * in the process. 222*8d67ca89SAndroid Build Coastguard Worker * 223*8d67ca89SAndroid Build Coastguard Worker * Returns 0 on success, and returns -1 and sets `errno` on failure. 224*8d67ca89SAndroid Build Coastguard Worker */ 225*8d67ca89SAndroid Build Coastguard Worker int setresuid(uid_t __ruid, uid_t __euid, uid_t __suid); 226*8d67ca89SAndroid Build Coastguard Worker 227*8d67ca89SAndroid Build Coastguard Worker /** 228*8d67ca89SAndroid Build Coastguard Worker * [setreuid(2)](https://man7.org/linux/man-pages/man2/setreuid.2.html) sets 229*8d67ca89SAndroid Build Coastguard Worker * the real and effective group IDs (use -1 to leave an ID unchanged). 230*8d67ca89SAndroid Build Coastguard Worker * 231*8d67ca89SAndroid Build Coastguard Worker * On Android, this function only affects the calling thread, not all threads 232*8d67ca89SAndroid Build Coastguard Worker * in the process. 233*8d67ca89SAndroid Build Coastguard Worker * 234*8d67ca89SAndroid Build Coastguard Worker * Returns 0 on success, and returns -1 and sets `errno` on failure. 235*8d67ca89SAndroid Build Coastguard Worker */ 236*8d67ca89SAndroid Build Coastguard Worker int setreuid(uid_t __ruid, uid_t __euid); 237*8d67ca89SAndroid Build Coastguard Worker 238*8d67ca89SAndroid Build Coastguard Worker /** 239*8d67ca89SAndroid Build Coastguard Worker * [setuid(2)](https://man7.org/linux/man-pages/man2/setuid.2.html) sets 240*8d67ca89SAndroid Build Coastguard Worker * the user ID. 241*8d67ca89SAndroid Build Coastguard Worker * 242*8d67ca89SAndroid Build Coastguard Worker * On Android, this function only affects the calling thread, not all threads 243*8d67ca89SAndroid Build Coastguard Worker * in the process. 244*8d67ca89SAndroid Build Coastguard Worker * 245*8d67ca89SAndroid Build Coastguard Worker * Returns 0 on success, and returns -1 and sets `errno` on failure. 246*8d67ca89SAndroid Build Coastguard Worker */ 247*8d67ca89SAndroid Build Coastguard Worker int setuid(uid_t __uid); 248*8d67ca89SAndroid Build Coastguard Worker 249*8d67ca89SAndroid Build Coastguard Worker uid_t getuid(void); 250*8d67ca89SAndroid Build Coastguard Worker uid_t geteuid(void); 251*8d67ca89SAndroid Build Coastguard Worker gid_t getgid(void); 252*8d67ca89SAndroid Build Coastguard Worker gid_t getegid(void); 253*8d67ca89SAndroid Build Coastguard Worker int getgroups(int __size, gid_t* _Nullable __list); 254*8d67ca89SAndroid Build Coastguard Worker int setgroups(size_t __size, const gid_t* _Nullable __list); 255*8d67ca89SAndroid Build Coastguard Worker int getresuid(uid_t* _Nonnull __ruid, uid_t* _Nonnull __euid, uid_t* _Nonnull __suid); 256*8d67ca89SAndroid Build Coastguard Worker int getresgid(gid_t* _Nonnull __rgid, gid_t* _Nonnull __egid, gid_t* _Nonnull __sgid); 257*8d67ca89SAndroid Build Coastguard Worker char* _Nullable getlogin(void); 258*8d67ca89SAndroid Build Coastguard Worker 259*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(28) 260*8d67ca89SAndroid Build Coastguard Worker int getlogin_r(char* _Nonnull __buffer, size_t __buffer_size) __INTRODUCED_IN(28); 261*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(28) */ 262*8d67ca89SAndroid Build Coastguard Worker 263*8d67ca89SAndroid Build Coastguard Worker 264*8d67ca89SAndroid Build Coastguard Worker long fpathconf(int __fd, int __name); 265*8d67ca89SAndroid Build Coastguard Worker long pathconf(const char* _Nonnull __path, int __name); 266*8d67ca89SAndroid Build Coastguard Worker 267*8d67ca89SAndroid Build Coastguard Worker int access(const char* _Nonnull __path, int __mode); 268*8d67ca89SAndroid Build Coastguard Worker int faccessat(int __dirfd, const char* _Nonnull __path, int __mode, int __flags); 269*8d67ca89SAndroid Build Coastguard Worker int link(const char* _Nonnull __old_path, const char* _Nonnull __new_path); 270*8d67ca89SAndroid Build Coastguard Worker int linkat(int __old_dir_fd, const char* _Nonnull __old_path, int __new_dir_fd, const char* _Nonnull __new_path, int __flags); 271*8d67ca89SAndroid Build Coastguard Worker int unlink(const char* _Nonnull __path); 272*8d67ca89SAndroid Build Coastguard Worker int unlinkat(int __dirfd, const char* _Nonnull __path, int __flags); 273*8d67ca89SAndroid Build Coastguard Worker 274*8d67ca89SAndroid Build Coastguard Worker /** 275*8d67ca89SAndroid Build Coastguard Worker * [chdir(2)](https://man7.org/linux/man-pages/man2/chdir.2.html) changes 276*8d67ca89SAndroid Build Coastguard Worker * the current working directory to the given path. 277*8d67ca89SAndroid Build Coastguard Worker * 278*8d67ca89SAndroid Build Coastguard Worker * This function affects all threads in the process, so is generally a bad idea 279*8d67ca89SAndroid Build Coastguard Worker * on Android where most code will be running in a multi-threaded context. 280*8d67ca89SAndroid Build Coastguard Worker * 281*8d67ca89SAndroid Build Coastguard Worker * Returns 0 on success, and returns -1 and sets `errno` on failure. 282*8d67ca89SAndroid Build Coastguard Worker */ 283*8d67ca89SAndroid Build Coastguard Worker int chdir(const char* _Nonnull __path); 284*8d67ca89SAndroid Build Coastguard Worker 285*8d67ca89SAndroid Build Coastguard Worker /** 286*8d67ca89SAndroid Build Coastguard Worker * [fchdir(2)](https://man7.org/linux/man-pages/man2/chdir.2.html) changes 287*8d67ca89SAndroid Build Coastguard Worker * the current working directory to the given fd. 288*8d67ca89SAndroid Build Coastguard Worker * 289*8d67ca89SAndroid Build Coastguard Worker * This function affects all threads in the process, so is generally a bad idea 290*8d67ca89SAndroid Build Coastguard Worker * on Android where most code will be running in a multi-threaded context. 291*8d67ca89SAndroid Build Coastguard Worker * 292*8d67ca89SAndroid Build Coastguard Worker * Returns 0 on success, and returns -1 and sets `errno` on failure. 293*8d67ca89SAndroid Build Coastguard Worker */ 294*8d67ca89SAndroid Build Coastguard Worker int fchdir(int __fd); 295*8d67ca89SAndroid Build Coastguard Worker 296*8d67ca89SAndroid Build Coastguard Worker int rmdir(const char* _Nonnull __path); 297*8d67ca89SAndroid Build Coastguard Worker int pipe(int __fds[_Nonnull 2]); 298*8d67ca89SAndroid Build Coastguard Worker #if defined(__USE_GNU) 299*8d67ca89SAndroid Build Coastguard Worker int pipe2(int __fds[_Nonnull 2], int __flags); 300*8d67ca89SAndroid Build Coastguard Worker #endif 301*8d67ca89SAndroid Build Coastguard Worker int chroot(const char* _Nonnull __path); 302*8d67ca89SAndroid Build Coastguard Worker int symlink(const char* _Nonnull __old_path, const char* _Nonnull __new_path); 303*8d67ca89SAndroid Build Coastguard Worker int symlinkat(const char* _Nonnull __old_path, int __new_dir_fd, const char* _Nonnull __new_path); 304*8d67ca89SAndroid Build Coastguard Worker ssize_t readlink(const char* _Nonnull __path, char* _Nonnull __buf, size_t __buf_size); 305*8d67ca89SAndroid Build Coastguard Worker ssize_t readlinkat(int __dir_fd, const char* _Nonnull __path, char* _Nonnull __buf, size_t __buf_size); 306*8d67ca89SAndroid Build Coastguard Worker int chown(const char* _Nonnull __path, uid_t __owner, gid_t __group); 307*8d67ca89SAndroid Build Coastguard Worker int fchown(int __fd, uid_t __owner, gid_t __group); 308*8d67ca89SAndroid Build Coastguard Worker int fchownat(int __dir_fd, const char* _Nonnull __path, uid_t __owner, gid_t __group, int __flags); 309*8d67ca89SAndroid Build Coastguard Worker int lchown(const char* _Nonnull __path, uid_t __owner, gid_t __group); 310*8d67ca89SAndroid Build Coastguard Worker char* _Nullable getcwd(char* _Nullable __buf, size_t __size); 311*8d67ca89SAndroid Build Coastguard Worker 312*8d67ca89SAndroid Build Coastguard Worker void sync(void); 313*8d67ca89SAndroid Build Coastguard Worker #if defined(__USE_GNU) 314*8d67ca89SAndroid Build Coastguard Worker 315*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(28) 316*8d67ca89SAndroid Build Coastguard Worker int syncfs(int __fd) __INTRODUCED_IN(28); 317*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(28) */ 318*8d67ca89SAndroid Build Coastguard Worker 319*8d67ca89SAndroid Build Coastguard Worker #endif 320*8d67ca89SAndroid Build Coastguard Worker 321*8d67ca89SAndroid Build Coastguard Worker int close(int __fd); 322*8d67ca89SAndroid Build Coastguard Worker 323*8d67ca89SAndroid Build Coastguard Worker /** 324*8d67ca89SAndroid Build Coastguard Worker * [read(2)](https://man7.org/linux/man-pages/man2/read.2.html) reads 325*8d67ca89SAndroid Build Coastguard Worker * up to `__count` bytes from file descriptor `__fd` into `__buf`. 326*8d67ca89SAndroid Build Coastguard Worker * 327*8d67ca89SAndroid Build Coastguard Worker * Note: `__buf` is not normally nullable, but may be null in the 328*8d67ca89SAndroid Build Coastguard Worker * special case of a zero-length read(), which while not generally 329*8d67ca89SAndroid Build Coastguard Worker * useful may be meaningful to some device drivers. 330*8d67ca89SAndroid Build Coastguard Worker * 331*8d67ca89SAndroid Build Coastguard Worker * Returns the number of bytes read on success, and returns -1 and sets `errno` on failure. 332*8d67ca89SAndroid Build Coastguard Worker */ 333*8d67ca89SAndroid Build Coastguard Worker ssize_t read(int __fd, void* __BIONIC_COMPLICATED_NULLNESS __buf, size_t __count); 334*8d67ca89SAndroid Build Coastguard Worker 335*8d67ca89SAndroid Build Coastguard Worker /** 336*8d67ca89SAndroid Build Coastguard Worker * [write(2)](https://man7.org/linux/man-pages/man2/write.2.html) writes 337*8d67ca89SAndroid Build Coastguard Worker * up to `__count` bytes to file descriptor `__fd` from `__buf`. 338*8d67ca89SAndroid Build Coastguard Worker * 339*8d67ca89SAndroid Build Coastguard Worker * Note: `__buf` is not normally nullable, but may be null in the 340*8d67ca89SAndroid Build Coastguard Worker * special case of a zero-length write(), which while not generally 341*8d67ca89SAndroid Build Coastguard Worker * useful may be meaningful to some device drivers. 342*8d67ca89SAndroid Build Coastguard Worker * 343*8d67ca89SAndroid Build Coastguard Worker * Returns the number of bytes written on success, and returns -1 and sets `errno` on failure. 344*8d67ca89SAndroid Build Coastguard Worker */ 345*8d67ca89SAndroid Build Coastguard Worker ssize_t write(int __fd, const void* __BIONIC_COMPLICATED_NULLNESS __buf, size_t __count); 346*8d67ca89SAndroid Build Coastguard Worker 347*8d67ca89SAndroid Build Coastguard Worker int dup(int __old_fd); 348*8d67ca89SAndroid Build Coastguard Worker int dup2(int __old_fd, int __new_fd); 349*8d67ca89SAndroid Build Coastguard Worker int dup3(int __old_fd, int __new_fd, int __flags); 350*8d67ca89SAndroid Build Coastguard Worker int fsync(int __fd); 351*8d67ca89SAndroid Build Coastguard Worker int fdatasync(int __fd); 352*8d67ca89SAndroid Build Coastguard Worker 353*8d67ca89SAndroid Build Coastguard Worker /* See https://android.googlesource.com/platform/bionic/+/main/docs/32-bit-abi.md */ 354*8d67ca89SAndroid Build Coastguard Worker #if defined(__USE_FILE_OFFSET64) 355*8d67ca89SAndroid Build Coastguard Worker int truncate(const char* _Nonnull __path, off_t __length) __RENAME(truncate64); 356*8d67ca89SAndroid Build Coastguard Worker off_t lseek(int __fd, off_t __offset, int __whence) __RENAME(lseek64); 357*8d67ca89SAndroid Build Coastguard Worker ssize_t pread(int __fd, void* _Nonnull __buf, size_t __count, off_t __offset) __RENAME(pread64); 358*8d67ca89SAndroid Build Coastguard Worker ssize_t pwrite(int __fd, const void* _Nonnull __buf, size_t __count, off_t __offset) __RENAME(pwrite64); 359*8d67ca89SAndroid Build Coastguard Worker int ftruncate(int __fd, off_t __length) __RENAME(ftruncate64); 360*8d67ca89SAndroid Build Coastguard Worker #else 361*8d67ca89SAndroid Build Coastguard Worker int truncate(const char* _Nonnull __path, off_t __length); 362*8d67ca89SAndroid Build Coastguard Worker off_t lseek(int __fd, off_t __offset, int __whence); 363*8d67ca89SAndroid Build Coastguard Worker ssize_t pread(int __fd, void* _Nonnull __buf, size_t __count, off_t __offset); 364*8d67ca89SAndroid Build Coastguard Worker ssize_t pwrite(int __fd, const void* _Nonnull __buf, size_t __count, off_t __offset); 365*8d67ca89SAndroid Build Coastguard Worker int ftruncate(int __fd, off_t __length); 366*8d67ca89SAndroid Build Coastguard Worker #endif 367*8d67ca89SAndroid Build Coastguard Worker 368*8d67ca89SAndroid Build Coastguard Worker int truncate64(const char* _Nonnull __path, off64_t __length); 369*8d67ca89SAndroid Build Coastguard Worker off64_t lseek64(int __fd, off64_t __offset, int __whence); 370*8d67ca89SAndroid Build Coastguard Worker ssize_t pread64(int __fd, void* _Nonnull __buf, size_t __count, off64_t __offset); 371*8d67ca89SAndroid Build Coastguard Worker ssize_t pwrite64(int __fd, const void* _Nonnull __buf, size_t __count, off64_t __offset); 372*8d67ca89SAndroid Build Coastguard Worker int ftruncate64(int __fd, off64_t __length); 373*8d67ca89SAndroid Build Coastguard Worker 374*8d67ca89SAndroid Build Coastguard Worker int pause(void); 375*8d67ca89SAndroid Build Coastguard Worker unsigned int alarm(unsigned int __seconds); 376*8d67ca89SAndroid Build Coastguard Worker unsigned int sleep(unsigned int __seconds); 377*8d67ca89SAndroid Build Coastguard Worker int usleep(useconds_t __microseconds); 378*8d67ca89SAndroid Build Coastguard Worker 379*8d67ca89SAndroid Build Coastguard Worker int gethostname(char* _Nonnull _buf, size_t __buf_size); 380*8d67ca89SAndroid Build Coastguard Worker 381*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(23) 382*8d67ca89SAndroid Build Coastguard Worker int sethostname(const char* _Nonnull __name, size_t __n) __INTRODUCED_IN(23); 383*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(23) */ 384*8d67ca89SAndroid Build Coastguard Worker 385*8d67ca89SAndroid Build Coastguard Worker 386*8d67ca89SAndroid Build Coastguard Worker int brk(void* _Nonnull __addr); 387*8d67ca89SAndroid Build Coastguard Worker void* _Nullable sbrk(ptrdiff_t __increment); 388*8d67ca89SAndroid Build Coastguard Worker 389*8d67ca89SAndroid Build Coastguard Worker int isatty(int __fd); 390*8d67ca89SAndroid Build Coastguard Worker char* _Nullable ttyname(int __fd); 391*8d67ca89SAndroid Build Coastguard Worker int ttyname_r(int __fd, char* _Nonnull __buf, size_t __buf_size); 392*8d67ca89SAndroid Build Coastguard Worker 393*8d67ca89SAndroid Build Coastguard Worker int acct(const char* _Nullable __path); 394*8d67ca89SAndroid Build Coastguard Worker 395*8d67ca89SAndroid Build Coastguard Worker /** 396*8d67ca89SAndroid Build Coastguard Worker * [getpagesize(2)](https://man7.org/linux/man-pages/man2/getpagesize.2.html) 397*8d67ca89SAndroid Build Coastguard Worker * returns the system's page size. This is slightly faster than going via 398*8d67ca89SAndroid Build Coastguard Worker * sysconf(), and avoids the linear search in getauxval(). 399*8d67ca89SAndroid Build Coastguard Worker * 400*8d67ca89SAndroid Build Coastguard Worker * Returns the system's page size in bytes. 401*8d67ca89SAndroid Build Coastguard Worker */ 402*8d67ca89SAndroid Build Coastguard Worker int getpagesize(void) __attribute_const__; 403*8d67ca89SAndroid Build Coastguard Worker 404*8d67ca89SAndroid Build Coastguard Worker long syscall(long __number, ...); 405*8d67ca89SAndroid Build Coastguard Worker 406*8d67ca89SAndroid Build Coastguard Worker int daemon(int __no_chdir, int __no_close); 407*8d67ca89SAndroid Build Coastguard Worker 408*8d67ca89SAndroid Build Coastguard Worker #if defined(__arm__) 409*8d67ca89SAndroid Build Coastguard Worker /** 410*8d67ca89SAndroid Build Coastguard Worker * New code should use __builtin___clear_cache() instead, which works on 411*8d67ca89SAndroid Build Coastguard Worker * all architectures. 412*8d67ca89SAndroid Build Coastguard Worker */ 413*8d67ca89SAndroid Build Coastguard Worker int cacheflush(long __addr, long __nbytes, long __cache); 414*8d67ca89SAndroid Build Coastguard Worker #endif 415*8d67ca89SAndroid Build Coastguard Worker 416*8d67ca89SAndroid Build Coastguard Worker pid_t tcgetpgrp(int __fd); 417*8d67ca89SAndroid Build Coastguard Worker int tcsetpgrp(int __fd, pid_t __pid); 418*8d67ca89SAndroid Build Coastguard Worker 419*8d67ca89SAndroid Build Coastguard Worker /* Used to retry syscalls that can return EINTR. */ 420*8d67ca89SAndroid Build Coastguard Worker #define TEMP_FAILURE_RETRY(exp) ({ \ 421*8d67ca89SAndroid Build Coastguard Worker __typeof__(exp) _rc; \ 422*8d67ca89SAndroid Build Coastguard Worker do { \ 423*8d67ca89SAndroid Build Coastguard Worker _rc = (exp); \ 424*8d67ca89SAndroid Build Coastguard Worker } while (_rc == -1 && errno == EINTR); \ 425*8d67ca89SAndroid Build Coastguard Worker _rc; }) 426*8d67ca89SAndroid Build Coastguard Worker 427*8d67ca89SAndroid Build Coastguard Worker 428*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(26) 429*8d67ca89SAndroid Build Coastguard Worker int getdomainname(char* _Nonnull __buf, size_t __buf_size) __INTRODUCED_IN(26); 430*8d67ca89SAndroid Build Coastguard Worker int setdomainname(const char* _Nonnull __name, size_t __n) __INTRODUCED_IN(26); 431*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(26) */ 432*8d67ca89SAndroid Build Coastguard Worker 433*8d67ca89SAndroid Build Coastguard Worker 434*8d67ca89SAndroid Build Coastguard Worker /** 435*8d67ca89SAndroid Build Coastguard Worker * [copy_file_range(2)](https://man7.org/linux/man-pages/man2/copy_file_range.2.html) copies 436*8d67ca89SAndroid Build Coastguard Worker * a range of data from one file descriptor to another. 437*8d67ca89SAndroid Build Coastguard Worker * 438*8d67ca89SAndroid Build Coastguard Worker * Available since API level 34. 439*8d67ca89SAndroid Build Coastguard Worker * 440*8d67ca89SAndroid Build Coastguard Worker * Returns the number of bytes copied on success, and returns -1 and sets 441*8d67ca89SAndroid Build Coastguard Worker * `errno` on failure. 442*8d67ca89SAndroid Build Coastguard Worker */ 443*8d67ca89SAndroid Build Coastguard Worker 444*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(34) 445*8d67ca89SAndroid Build Coastguard Worker ssize_t copy_file_range(int __fd_in, off64_t* _Nullable __off_in, int __fd_out, off64_t* _Nullable __off_out, size_t __length, unsigned int __flags) __INTRODUCED_IN(34); 446*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(34) */ 447*8d67ca89SAndroid Build Coastguard Worker 448*8d67ca89SAndroid Build Coastguard Worker 449*8d67ca89SAndroid Build Coastguard Worker #if __ANDROID_API__ >= 28 450*8d67ca89SAndroid Build Coastguard Worker void swab(const void* _Nonnull __src, void* _Nonnull __dst, ssize_t __byte_count) __INTRODUCED_IN(28); 451*8d67ca89SAndroid Build Coastguard Worker #endif 452*8d67ca89SAndroid Build Coastguard Worker 453*8d67ca89SAndroid Build Coastguard Worker /** 454*8d67ca89SAndroid Build Coastguard Worker * [close_range(2)](https://man7.org/linux/man-pages/man2/close_range.2.html) 455*8d67ca89SAndroid Build Coastguard Worker * performs an action (which depends on value of flags) on an inclusive range 456*8d67ca89SAndroid Build Coastguard Worker * of file descriptors. 457*8d67ca89SAndroid Build Coastguard Worker * 458*8d67ca89SAndroid Build Coastguard Worker * Available since API level 34. 459*8d67ca89SAndroid Build Coastguard Worker * 460*8d67ca89SAndroid Build Coastguard Worker * Note: there is no emulation on too old kernels, hence this will fail with 461*8d67ca89SAndroid Build Coastguard Worker * -1/ENOSYS on pre-5.9 kernels, -1/EINVAL for unsupported flags. In particular 462*8d67ca89SAndroid Build Coastguard Worker * CLOSE_RANGE_CLOEXEC requires 5.11, though support was backported to Android 463*8d67ca89SAndroid Build Coastguard Worker * Common Kernel 5.10-T. 464*8d67ca89SAndroid Build Coastguard Worker * 465*8d67ca89SAndroid Build Coastguard Worker * Returns 0 on success, and returns -1 and sets `errno` on failure. 466*8d67ca89SAndroid Build Coastguard Worker */ 467*8d67ca89SAndroid Build Coastguard Worker 468*8d67ca89SAndroid Build Coastguard Worker #if __BIONIC_AVAILABILITY_GUARD(34) 469*8d67ca89SAndroid Build Coastguard Worker int close_range(unsigned int __min_fd, unsigned int __max_fd, int __flags) __INTRODUCED_IN(34); 470*8d67ca89SAndroid Build Coastguard Worker #endif /* __BIONIC_AVAILABILITY_GUARD(34) */ 471*8d67ca89SAndroid Build Coastguard Worker 472*8d67ca89SAndroid Build Coastguard Worker 473*8d67ca89SAndroid Build Coastguard Worker #if defined(__BIONIC_INCLUDE_FORTIFY_HEADERS) 474*8d67ca89SAndroid Build Coastguard Worker #define _UNISTD_H_ 475*8d67ca89SAndroid Build Coastguard Worker #include <bits/fortify/unistd.h> 476*8d67ca89SAndroid Build Coastguard Worker #undef _UNISTD_H_ 477*8d67ca89SAndroid Build Coastguard Worker #endif 478*8d67ca89SAndroid Build Coastguard Worker 479*8d67ca89SAndroid Build Coastguard Worker __END_DECLS 480*8d67ca89SAndroid Build Coastguard Worker 481*8d67ca89SAndroid Build Coastguard Worker #include <android/legacy_unistd_inlines.h> 482