unistd.h revision a6ecba4d233d7b769a05ee81ae908c9105352624
11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * All rights reserved. 41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Redistribution and use in source and binary forms, with or without 61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * modification, are permitted provided that the following conditions 71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * are met: 81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * * Redistributions of source code must retain the above copyright 91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * notice, this list of conditions and the following disclaimer. 101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * * Redistributions in binary form must reproduce the above copyright 111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * notice, this list of conditions and the following disclaimer in 121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * the documentation and/or other materials provided with the 131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * distribution. 141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * SUCH DAMAGE. 271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef _UNISTD_H_ 291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _UNISTD_H_ 301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <stddef.h> 321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/cdefs.h> 331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/types.h> 341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/select.h> 351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/sysconf.h> 361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <pathconf.h> 371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__BEGIN_DECLS 391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* Standard file descriptor numbers. */ 411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define STDIN_FILENO 0 421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define STDOUT_FILENO 1 431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define STDERR_FILENO 2 441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* Values for whence in fseek and lseek */ 461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define SEEK_SET 0 471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define SEEK_CUR 1 481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define SEEK_END 2 491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern char **environ; 511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern __noreturn void _exit(int); 521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern pid_t fork(void); 541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern pid_t vfork(void); 551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern pid_t getpid(void); 561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern pid_t gettid(void); 571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern pid_t getpgid(pid_t); 581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int setpgid(pid_t, pid_t); 591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern pid_t getppid(void); 601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern pid_t getpgrp(void); 611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int setpgrp(void); 621ad10a566e042676c95a0bdbf3cbc48e99ddafb2Irina Tirdeaextern pid_t getsid(pid_t); 631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern pid_t setsid(void); 641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int execv(const char *, char * const *); 661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int execvp(const char *, char * const *); 671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int execve(const char *, char * const *, char * const *); 681dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int execl(const char *, const char *, ...); 691dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int execlp(const char *, const char *, ...); 701dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int execle(const char *, const char *, ...); 71b083bb57f5cae6b1fa3fd756a2720a3de806da2bDavid 'Digit' Turner 72b083bb57f5cae6b1fa3fd756a2720a3de806da2bDavid 'Digit' Turner/* IMPORTANT: See comment under <sys/prctl.h> about this declaration */ 73b083bb57f5cae6b1fa3fd756a2720a3de806da2bDavid 'Digit' Turnerextern int prctl(int option, ...); 741dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 751dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int nice(int); 761dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 771dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int setuid(uid_t); 781dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern uid_t getuid(void); 791dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int seteuid(uid_t); 801dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern uid_t geteuid(void); 811dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int setgid(gid_t); 821dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern gid_t getgid(void); 831dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int setegid(gid_t); 841dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern gid_t getegid(void); 851dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int getgroups(int, gid_t *); 861dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int setgroups(size_t, const gid_t *); 871dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int setreuid(uid_t, uid_t); 881dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int setregid(gid_t, gid_t); 891dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int setresuid(uid_t, uid_t, uid_t); 901dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int setresgid(gid_t, gid_t, gid_t); 911dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); 921dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); 931dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int issetugid(void); 941dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern char* getlogin(void); 95fc10b24accd082fb33c8f92ff8b92481c22fe3dcColin Crossextern char* getusershell(void); 96fc10b24accd082fb33c8f92ff8b92481c22fe3dcColin Crossextern void setusershell(void); 97fc10b24accd082fb33c8f92ff8b92481c22fe3dcColin Crossextern void endusershell(void); 98fc10b24accd082fb33c8f92ff8b92481c22fe3dcColin Cross 991dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1001dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1011dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* Macros for access() */ 1021dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define R_OK 4 /* Read */ 1031dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define W_OK 2 /* Write */ 1041dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define X_OK 1 /* Execute */ 1051dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define F_OK 0 /* Existence */ 1061dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 107f8fcfbc85a3ce3e195626b90736d3a484331494bElliott Hughesextern int access(const char*, int); 108f8fcfbc85a3ce3e195626b90736d3a484331494bElliott Hughesextern int faccessat(int, const char*, int, int); 109f8fcfbc85a3ce3e195626b90736d3a484331494bElliott Hughesextern int link(const char*, const char*); 110f8fcfbc85a3ce3e195626b90736d3a484331494bElliott Hughesextern int linkat(int, const char*, int, const char*, int); 111f8fcfbc85a3ce3e195626b90736d3a484331494bElliott Hughesextern int unlink(const char*); 112f8fcfbc85a3ce3e195626b90736d3a484331494bElliott Hughesextern int unlinkat(int, const char*, int); 1131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int chdir(const char *); 1141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int fchdir(int); 1151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int rmdir(const char *); 1161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int pipe(int *); 117cac7b9d6ec1a09814bc028e2f768db732f018891Elliott Hughes#ifdef _GNU_SOURCE 118275cd48511daabe4591caa49c3ad0df34a6889ffDavid 'Digit' Turnerextern int pipe2(int *, int); 119275cd48511daabe4591caa49c3ad0df34a6889ffDavid 'Digit' Turner#endif 1201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int chroot(const char *); 121f8fcfbc85a3ce3e195626b90736d3a484331494bElliott Hughesextern int symlink(const char*, const char*); 122f8fcfbc85a3ce3e195626b90736d3a484331494bElliott Hughesextern int symlinkat(const char*, int, const char*); 123f8fcfbc85a3ce3e195626b90736d3a484331494bElliott Hughesextern ssize_t readlink(const char*, char*, size_t); 124f8fcfbc85a3ce3e195626b90736d3a484331494bElliott Hughesextern ssize_t readlinkat(int, const char*, char*, size_t); 1251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int chown(const char *, uid_t, gid_t); 1261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int fchown(int, uid_t, gid_t); 127f8fcfbc85a3ce3e195626b90736d3a484331494bElliott Hughesextern int fchownat(int, const char*, uid_t, gid_t, int); 1281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int lchown(const char *, uid_t, gid_t); 129da3019b55305ce51b1b483d8727641e791ce0941David 'Digit' Turnerextern int truncate(const char *, off_t); 130b4f7616fd618875768b8fffc122b58bdb84a9969Elliott Hughesextern int truncate64(const char *, off64_t); 1311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern char *getcwd(char *, size_t); 1321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int sync(void); 1341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int close(int); 1361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern off_t lseek(int, off_t, int); 13763673645c4da1cf97938d5018d7d373837563174Dima Zavinextern off64_t lseek64(int, off64_t, int); 1381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern ssize_t read(int, void *, size_t); 1401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern ssize_t write(int, const void *, size_t); 1411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern ssize_t pread(int, void *, size_t, off_t); 14272e64e08697cc2b3d66397c8b6d34965dd2a7338Kenny Rootextern ssize_t pread64(int, void *, size_t, off64_t); 1432304a0bf86f224efdd67e38f34c97f35c5cf3c56Jeff Hamiltonextern ssize_t pwrite(int, const void *, size_t, off_t); 14472e64e08697cc2b3d66397c8b6d34965dd2a7338Kenny Rootextern ssize_t pwrite64(int, const void *, size_t, off64_t); 1451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int dup(int); 1471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int dup2(int, int); 148cac7b9d6ec1a09814bc028e2f768db732f018891Elliott Hughes#ifdef _GNU_SOURCE 149cac7b9d6ec1a09814bc028e2f768db732f018891Elliott Hughesextern int dup3(int, int, int); 150cac7b9d6ec1a09814bc028e2f768db732f018891Elliott Hughes#endif 1511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int fcntl(int, int, ...); 1521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int ioctl(int, int, ...); 1531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int flock(int, int); 1541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int fsync(int); 1551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int fdatasync(int); 1561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int ftruncate(int, off_t); 15795d751feacdb58d3fbc36f3f21a895a3ec2f065bDavid 'Digit' Turnerextern int ftruncate64(int, off64_t); 1581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int pause(void); 1601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern unsigned int alarm(unsigned int); 1611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern unsigned int sleep(unsigned int); 162ab61eb366ac48addf2bca6093a34455193f5c8dfElliott Hughesextern int usleep(useconds_t); 1631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int gethostname(char *, size_t); 1651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int getdtablesize(void); 1671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1681dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern void *__brk(void *); 1691dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int brk(void *); 1701dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern void *sbrk(ptrdiff_t); 1711dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1721dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int getopt(int, char * const *, const char *); 1731dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern char *optarg; 1741dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int optind, opterr, optopt; 1751dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1761dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int isatty(int); 177fc10b24accd082fb33c8f92ff8b92481c22fe3dcColin Crossextern char* ttyname(int); 178fc10b24accd082fb33c8f92ff8b92481c22fe3dcColin Crossextern int ttyname_r(int, char*, size_t); 1791dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1801dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int acct(const char* filepath); 1811dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1829ae59c02ca68da5bb45152c85c4cab6fd6f7aba2Bernhard Rosenkraenzerint getpagesize(void); 1831dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1841dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int sysconf(int name); 1851dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1861dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int daemon(int, int); 1871dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 188a6ecba4d233d7b769a05ee81ae908c9105352624Elliott Hughes#if defined(__arm__) || (defined(__mips__) && !defined(__LP64__)) 189a6ecba4d233d7b769a05ee81ae908c9105352624Elliott Hughesextern int cacheflush(long, long, long); 190a6ecba4d233d7b769a05ee81ae908c9105352624Elliott Hughes /* __attribute__((deprecated("use __builtin___clear_cache instead"))); */ 191a6ecba4d233d7b769a05ee81ae908c9105352624Elliott Hughes#endif 1921dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1931dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern pid_t tcgetpgrp(int fd); 1941dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int tcsetpgrp(int fd, pid_t _pid); 1951dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 196bb5581ad6eec40041dab4e961149f7a8a3a83497David 'Digit' Turner#if 0 /* MISSING FROM BIONIC */ 197bb5581ad6eec40041dab4e961149f7a8a3a83497David 'Digit' Turnerextern int execvpe(const char *, char * const *, char * const *); 198bb5581ad6eec40041dab4e961149f7a8a3a83497David 'Digit' Turnerextern int execlpe(const char *, const char *, ...); 199bb5581ad6eec40041dab4e961149f7a8a3a83497David 'Digit' Turnerextern int getfsuid(uid_t); 200bb5581ad6eec40041dab4e961149f7a8a3a83497David 'Digit' Turnerextern int setfsuid(uid_t); 201bb5581ad6eec40041dab4e961149f7a8a3a83497David 'Digit' Turnerextern int getlogin_r(char* name, size_t namesize); 202bb5581ad6eec40041dab4e961149f7a8a3a83497David 'Digit' Turnerextern int sethostname(const char *, size_t); 203bb5581ad6eec40041dab4e961149f7a8a3a83497David 'Digit' Turnerextern int getdomainname(char *, size_t); 204bb5581ad6eec40041dab4e961149f7a8a3a83497David 'Digit' Turnerextern int setdomainname(const char *, size_t); 205bb5581ad6eec40041dab4e961149f7a8a3a83497David 'Digit' Turner#endif /* MISSING */ 206bb5581ad6eec40041dab4e961149f7a8a3a83497David 'Digit' Turner 207cf399f77b83b03cd83da784aa27ef1df71cca78dElliott Hughes/* Used to retry syscalls that can return EINTR. */ 208cf399f77b83b03cd83da784aa27ef1df71cca78dElliott Hughes#define TEMP_FAILURE_RETRY(exp) ({ \ 209cf399f77b83b03cd83da784aa27ef1df71cca78dElliott Hughes typeof (exp) _rc; \ 210cf399f77b83b03cd83da784aa27ef1df71cca78dElliott Hughes do { \ 211cf399f77b83b03cd83da784aa27ef1df71cca78dElliott Hughes _rc = (exp); \ 212cf399f77b83b03cd83da784aa27ef1df71cca78dElliott Hughes } while (_rc == -1 && errno == EINTR); \ 213cf399f77b83b03cd83da784aa27ef1df71cca78dElliott Hughes _rc; }) 214cf399f77b83b03cd83da784aa27ef1df71cca78dElliott Hughes 215b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich#if defined(__BIONIC_FORTIFY) 216b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevichextern ssize_t __read_chk(int, void*, size_t, size_t); 217b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich__errordecl(__read_dest_size_error, "read called with size bigger than destination"); 218b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich__errordecl(__read_count_toobig_error, "read called with count > SSIZE_MAX"); 219b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevichextern ssize_t __read_real(int, void*, size_t) 220b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich __asm__(__USER_LABEL_PREFIX__ "read"); 221b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich 222b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich__BIONIC_FORTIFY_INLINE 223b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevichssize_t read(int fd, void* buf, size_t count) { 224b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich size_t bos = __bos0(buf); 225b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich 226b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich#if !defined(__clang__) 227b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich if (__builtin_constant_p(count) && (count > SSIZE_MAX)) { 228b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich __read_count_toobig_error(); 229b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich } 230b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich 231b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich if (bos == __BIONIC_FORTIFY_UNKNOWN_SIZE) { 232b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich return __read_real(fd, buf, count); 233b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich } 234b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich 235b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich if (__builtin_constant_p(count) && (count > bos)) { 236b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich __read_dest_size_error(); 237b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich } 238b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich 239b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich if (__builtin_constant_p(count) && (count <= bos)) { 240b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich return __read_real(fd, buf, count); 241b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich } 242b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich#endif 243b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich 244b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich return __read_chk(fd, buf, count, bos); 245b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich} 246b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich#endif /* defined(__BIONIC_FORTIFY) */ 247b036b5ca36c1e12b075909b3eca6eab73ee611cfNick Kralevich 2481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__END_DECLS 2491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 2501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* _UNISTD_H_ */ 251