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