]> git.saurik.com Git - apple/libc.git/blobdiff - include/unistd.h
Libc-825.24.tar.gz
[apple/libc.git] / include / unistd.h
index 82f78557835c88cf8250471d3f4318ed5f6c5afd..3f582dab08c8d5ac2c9fed69a24c98393dd827a8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000, 2002-2006, 2008-2010, 2012 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
 #define        _UNISTD_H_
 
 #include <_types.h>
-
-#include <sys/cdefs.h>
 #include <sys/unistd.h>
+#include <Availability.h>
 
 #ifndef _GID_T
-#define _GID_T
+#define        _GID_T
 typedef __darwin_gid_t         gid_t;
 #endif
 
 #ifndef _INTPTR_T
-#define _INTPTR_T
+#define        _INTPTR_T
 typedef __darwin_intptr_t      intptr_t;
 #endif
 
 #ifndef _OFF_T
-#define _OFF_T
+#define        _OFF_T
 typedef __darwin_off_t         off_t;
 #endif
 
 #ifndef _PID_T
-#define _PID_T
+#define        _PID_T
 typedef __darwin_pid_t         pid_t;
 #endif
 
 #ifndef _SIZE_T
-#define _SIZE_T
+#define        _SIZE_T
 /* DO NOT REMOVE THIS COMMENT: fixincludes needs to see:
  * _GCC_SIZE_T */
 typedef __darwin_size_t                size_t;
@@ -106,34 +105,28 @@ typedef   __darwin_ssize_t        ssize_t;
 #endif
 
 #ifndef _UID_T
-#define _UID_T
+#define        _UID_T
 typedef __darwin_uid_t         uid_t;  /* user id      */
 #endif
 
 #ifndef _USECONDS_T
-#define _USECONDS_T
+#define        _USECONDS_T
 typedef __darwin_useconds_t    useconds_t;
 #endif
 
-#ifndef _POSIX_C_SOURCE
-#ifndef _UUID_T
-#define _UUID_T
-typedef __darwin_uuid_t                uuid_t;
-#endif /* _UUID_T */
-#endif /* _POSIX_C_SOURCE */
+#ifndef NULL
+#define        NULL __DARWIN_NULL
+#endif /* ! NULL */
 
 #define         STDIN_FILENO   0       /* standard input file descriptor */
 #define        STDOUT_FILENO   1       /* standard output file descriptor */
 #define        STDERR_FILENO   2       /* standard error file descriptor */
 
-#ifndef NULL
-#define NULL __DARWIN_NULL
-#endif /* ! NULL */
 
 /* Version test macros */
 /* _POSIX_VERSION and _POSIX2_VERSION from sys/unistd.h */
 #define        _XOPEN_VERSION                  600             /* [XSI] */
-#define _XOPEN_XCU_VERSION             4               /* Older standard */
+#define        _XOPEN_XCU_VERSION              4               /* Older standard */
 
 
 /* Please keep this list in the same order as the applicable standard */
@@ -143,7 +136,7 @@ typedef __darwin_uuid_t             uuid_t;
 #define        _POSIX_CHOWN_RESTRICTED         200112L
 #define        _POSIX_CLOCK_SELECTION          (-1)            /* [CS] */
 #define        _POSIX_CPUTIME                  (-1)            /* [CPT] */
-#define        _POSIX_FSYNC                    (-1)            /* [FSC] */
+#define        _POSIX_FSYNC                    200112L         /* [FSC] */
 #define        _POSIX_IPV6                     200112L
 #define        _POSIX_JOB_CONTROL              200112L
 #define        _POSIX_MAPPED_FILES             200112L         /* [MF] */
@@ -173,10 +166,10 @@ typedef __darwin_uuid_t           uuid_t;
 #define        _POSIX_THREAD_PRIO_INHERIT      (-1)            /* [TPI] */
 #define        _POSIX_THREAD_PRIO_PROTECT      (-1)            /* [TPP] */
 #define        _POSIX_THREAD_PRIORITY_SCHEDULING       (-1)    /* [TPS] */
-#define        _POSIX_THREAD_PROCESS_SHARED    (-1)            /* [TSH] */
+#define        _POSIX_THREAD_PROCESS_SHARED    200112L         /* [TSH] */
 #define        _POSIX_THREAD_SAFE_FUNCTIONS    200112L         /* [TSF] */
 #define        _POSIX_THREAD_SPORADIC_SERVER   (-1)            /* [TSP] */
-#define _POSIX_THREADS                 200112L         /* [THR] */
+#define        _POSIX_THREADS                  200112L         /* [THR] */
 #define        _POSIX_TIMEOUTS                 (-1)            /* [TMO] */
 #define        _POSIX_TIMERS                   (-1)            /* [TMR] */
 #define        _POSIX_TRACE                    (-1)            /* [TRC] */
@@ -188,6 +181,7 @@ typedef __darwin_uuid_t             uuid_t;
 #define        _POSIX_VDISABLE                 0xff            /* same as sys/termios.h */
 #endif /* _POSIX_VDISABLE */
 
+#if __DARWIN_C_LEVEL >= 199209L
 #define        _POSIX2_C_BIND                  200112L
 #define        _POSIX2_C_DEV                   200112L         /* c99 command */
 #define        _POSIX2_CHAR_TERM               200112L
@@ -202,31 +196,52 @@ typedef __darwin_uuid_t           uuid_t;
 #define        _POSIX2_PBS_TRACK               (-1)
 #define        _POSIX2_SW_DEV                  200112L
 #define        _POSIX2_UPE                     200112L /* XXXX no fc, newgrp, tabs */
-
-#define        _V6_ILP32_OFF32                 (-1)
-#define        _V6_ILP32_OFFBIG                (1)
-#define        _V6_LP64_OFF64                  (1)
-#define        _V6_LPBIG_OFFBIG                (1)
-
-#define        _XBS5_ILP32_OFF32               _V6_ILP32_OFF32         /* legacy */
-#define        _XBS5_ILP32_OFFBIG              _V6_ILP32_OFFBIG        /* legacy */
-#define        _XBS5_LP64_OFF64                _V6_LP64_OFF64          /* legacy */
-#define        _XBS5_LPBIG_OFFBIG              _V6_LPBIG_OFFBIG        /* legacy */
-
+#endif /* __DARWIN_C_LEVEL */
+
+#define        __ILP32_OFF32          (-1)
+#define        __ILP32_OFFBIG         (1)
+#define        __LP64_OFF64           (1)
+#define        __LPBIG_OFFBIG         (1)
+
+#if __DARWIN_C_LEVEL >= 200112L
+#define        _POSIX_V6_ILP32_OFF32           __ILP32_OFF32
+#define        _POSIX_V6_ILP32_OFFBIG          __ILP32_OFFBIG
+#define        _POSIX_V6_LP64_OFF64            __LP64_OFF64
+#define        _POSIX_V6_LPBIG_OFFBIG          __LPBIG_OFFBIG
+#endif /* __DARWIN_C_LEVEL >= 200112L */
+
+#if __DARWIN_C_LEVEL >= 200809L
+#define        _POSIX_V7_ILP32_OFF32           __ILP32_OFF32
+#define        _POSIX_V7_ILP32_OFFBIG          __ILP32_OFFBIG
+#define        _POSIX_V7_LP64_OFF64            __LP64_OFF64
+#define        _POSIX_V7_LPBIG_OFFBIG          __LPBIG_OFFBIG
+#endif /* __DARWIN_C_LEVEL >= 200809L */
+
+#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
+#define        _V6_ILP32_OFF32             __ILP32_OFF32
+#define        _V6_ILP32_OFFBIG            __ILP32_OFFBIG
+#define        _V6_LP64_OFF64              __LP64_OFF64
+#define        _V6_LPBIG_OFFBIG            __LPBIG_OFFBIG
+#endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
+
+#if (__DARWIN_C_LEVEL >= 199506L && __DARWIN_C_LEVEL < 200809L) || __DARWIN_C_LEVEL >= __DARWIN_C_FULL
+/* Removed in Issue 7 */
+#define        _XBS5_ILP32_OFF32                   __ILP32_OFF32
+#define        _XBS5_ILP32_OFFBIG                  __ILP32_OFFBIG
+#define        _XBS5_LP64_OFF64                    __LP64_OFF64
+#define        _XBS5_LPBIG_OFFBIG                  __LPBIG_OFFBIG
+#endif /* __DARWIN_C_LEVEL < 200809L */
+
+#if __DARWIN_C_LEVEL >= 199506L /* This really should be XSI */ 
 #define        _XOPEN_CRYPT                    (1)
 #define        _XOPEN_ENH_I18N                 (1)             /* XXX required */
 #define        _XOPEN_LEGACY                   (-1)    /* no ftime gcvt, wcswcs */
 #define        _XOPEN_REALTIME                 (-1)    /* no q'ed signals, mq_* */
 #define        _XOPEN_REALTIME_THREADS         (-1)    /* no posix_spawn, et. al. */
 #define        _XOPEN_SHM                      (1)
-#define        _XOPEN_STREAMS                  (-1)
+#define        _XOPEN_STREAMS                  (-1)   /* Issue 6 */
 #define        _XOPEN_UNIX                     (1)
-
-
-#define F_ULOCK         0      /* unlock locked section */
-#define F_LOCK          1      /* lock a section for exclusive use */
-#define F_TLOCK         2      /* test and lock a section for exclusive use */
-#define F_TEST          3      /* test a section for locks by other procs */
+#endif /* XSI */
 
 /* configurable system variables */
 #define        _SC_ARG_MAX                      1
@@ -256,7 +271,9 @@ typedef __darwin_uuid_t             uuid_t;
 #define        _SC_2_UPE                       25
 #define        _SC_STREAM_MAX                  26
 #define        _SC_TZNAME_MAX                  27
-#define _SC_ASYNCHRONOUS_IO            28
+
+#if __DARWIN_C_LEVEL >= 199309L
+#define        _SC_ASYNCHRONOUS_IO             28
 #define        _SC_PAGESIZE                    29
 #define        _SC_MEMLOCK                     30
 #define        _SC_MEMLOCK_RANGE               31
@@ -281,6 +298,14 @@ typedef __darwin_uuid_t            uuid_t;
 #define        _SC_SEM_VALUE_MAX               50
 #define        _SC_SIGQUEUE_MAX                51
 #define        _SC_TIMER_MAX                   52
+#endif /* __DARWIN_C_LEVEL >= 199309L */
+
+#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
+#define        _SC_NPROCESSORS_CONF            57
+#define        _SC_NPROCESSORS_ONLN            58
+#endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
+
+#if __DARWIN_C_LEVEL >= 200112L
 #define        _SC_2_PBS                       59
 #define        _SC_2_PBS_ACCOUNTING            60
 #define        _SC_2_PBS_CHECKPOINT            61
@@ -332,28 +357,53 @@ typedef __darwin_uuid_t           uuid_t;
 #define        _SC_IPV6                        118
 #define        _SC_RAW_SOCKETS                 119
 #define        _SC_SYMLOOP_MAX                 120
+#endif /* __DARWIN_C_LEVEL >= 200112L */
+
+#if __DARWIN_C_LEVEL >= 199506L /* Really XSI */
 #define        _SC_ATEXIT_MAX                  107
 #define        _SC_IOV_MAX                     56
 #define        _SC_PAGE_SIZE                   _SC_PAGESIZE
 #define        _SC_XOPEN_CRYPT                 108
 #define        _SC_XOPEN_ENH_I18N              109
-#define        _SC_XOPEN_LEGACY                110
-#define        _SC_XOPEN_REALTIME              111
-#define        _SC_XOPEN_REALTIME_THREADS      112
+#define        _SC_XOPEN_LEGACY                110      /* Issue 6 */
+#define        _SC_XOPEN_REALTIME              111      /* Issue 6 */
+#define        _SC_XOPEN_REALTIME_THREADS      112  /* Issue 6 */
 #define        _SC_XOPEN_SHM                   113
-#define        _SC_XOPEN_STREAMS               114
+#define        _SC_XOPEN_STREAMS               114      /* Issue 6 */
 #define        _SC_XOPEN_UNIX                  115
 #define        _SC_XOPEN_VERSION               116
 #define        _SC_XOPEN_XCU_VERSION           121
-#define _SC_XBS5_ILP32_OFF32           122
-#define _SC_XBS5_ILP32_OFFBIG          123
-#define _SC_XBS5_LP64_OFF64            124
-#define _SC_XBS5_LPBIG_OFFBIG          125
+#endif /* XSI */
+
+#if (__DARWIN_C_LEVEL >= 199506L && __DARWIN_C_LEVEL < 200809L) || __DARWIN_C_LEVEL >= __DARWIN_C_FULL
+/* Removed in Issue 7 */
+#define        _SC_XBS5_ILP32_OFF32            122
+#define        _SC_XBS5_ILP32_OFFBIG           123
+#define        _SC_XBS5_LP64_OFF64             124
+#define        _SC_XBS5_LPBIG_OFFBIG           125
+#endif /* __DARWIN_C_LEVEL <= 200809L */
+
+#if __DARWIN_C_LEVEL >= 200112L
+#define        _SC_SS_REPL_MAX                 126
+#define        _SC_TRACE_EVENT_NAME_MAX        127
+#define        _SC_TRACE_NAME_MAX              128
+#define        _SC_TRACE_SYS_MAX               129
+#define        _SC_TRACE_USER_EVENT_MAX        130
+#endif
 
-#ifndef _CS_PATH       /* XXX temporary #ifdef'ed for <sys/unistd.h> */
+#if __DARWIN_C_LEVEL < 200112L || __DARWIN_C_LEVEL >= __DARWIN_C_FULL
+/* Removed in Issue 6 */
+#define        _SC_PASS_MAX                    131
+#endif
+
+#if __DARWIN_C_LEVEL >= 199209L
+#ifndef _CS_PATH /* Defined in <sys/unistd.h> */
 #define        _CS_PATH                                1
 #endif
-#define _CS_POSIX_V6_ILP32_OFF32_CFLAGS                2
+#endif
+
+#if __DARWIN_C_LEVEL >= 200112
+#define        _CS_POSIX_V6_ILP32_OFF32_CFLAGS         2
 #define        _CS_POSIX_V6_ILP32_OFF32_LDFLAGS        3
 #define        _CS_POSIX_V6_ILP32_OFF32_LIBS           4
 #define        _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS        5
@@ -366,8 +416,10 @@ typedef __darwin_uuid_t            uuid_t;
 #define        _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS       12
 #define        _CS_POSIX_V6_LPBIG_OFFBIG_LIBS          13
 #define        _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS      14
+#endif
 
-/* reserved for compatibility with Issue 5 */
+#if (__DARWIN_C_LEVEL >= 199506L && __DARWIN_C_LEVEL < 200809L) || __DARWIN_C_LEVEL >= __DARWIN_C_FULL
+/* Removed in Issue 7 */
 #define        _CS_XBS5_ILP32_OFF32_CFLAGS             20
 #define        _CS_XBS5_ILP32_OFF32_LDFLAGS            21
 #define        _CS_XBS5_ILP32_OFF32_LIBS               22
@@ -384,19 +436,43 @@ typedef __darwin_uuid_t           uuid_t;
 #define        _CS_XBS5_LPBIG_OFFBIG_LDFLAGS           33
 #define        _CS_XBS5_LPBIG_OFFBIG_LIBS              34
 #define        _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS         35
+#endif
 
-__BEGIN_DECLS
+#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
+#define        _CS_DARWIN_USER_DIR                     65536
+#define        _CS_DARWIN_USER_TEMP_DIR                65537
+#define        _CS_DARWIN_USER_CACHE_DIR               65538
+#endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
+
+
+#ifdef _DARWIN_UNLIMITED_GETGROUPS
+#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_2
+#error "_DARWIN_UNLIMITED_GETGROUPS specified, but -miphoneos-version-min version does not support it."
+#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_6
+#error "_DARWIN_UNLIMITED_GETGROUPS specified, but -mmacosx-version-min version does not support it."
+#endif
+#endif
 
+/* POSIX.1-1990 */
+
+__BEGIN_DECLS
 void    _exit(int) __dead2;
 int     access(const char *, int);
 unsigned int
         alarm(unsigned int);
 int     chdir(const char *);
 int     chown(const char *, uid_t, gid_t);
-int     close(int);
-size_t  confstr(int, char *, size_t);
-char   *crypt(const char *, const char *);
-char   *ctermid(char *);
+
+//Begin-Libc
+#ifndef LIBC_ALIAS_CLOSE
+//End-Libc
+int     close(int) __DARWIN_ALIAS_C(close);
+//Begin-Libc
+#else /* LIBC_ALIAS_CLOSE */
+int     close(int) LIBC_ALIAS_C(close);
+#endif /* !LIBC_ALIAS_CLOSE */
+//End-Libc
+
 int     dup(int);
 int     dup2(int, int);
 int     execl(const char *, const char *, ...);
@@ -405,116 +481,377 @@ int      execlp(const char *, const char *, ...);
 int     execv(const char *, char * const *);
 int     execve(const char *, char * const *, char * const *);
 int     execvp(const char *, char * const *);
-int     fchown(int, uid_t, gid_t);
-int     fchdir(int);
 pid_t   fork(void);
 long    fpathconf(int, int);
-int     ftruncate(int, off_t);
 char   *getcwd(char *, size_t);
 gid_t   getegid(void);
 uid_t   geteuid(void);
 gid_t   getgid(void);
+#if defined(_DARWIN_UNLIMITED_GETGROUPS) || defined(_DARWIN_C_SOURCE)
+int     getgroups(int, gid_t []) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_3_2, __DARWIN_EXTSN(getgroups));
+#else /* !_DARWIN_UNLIMITED_GETGROUPS && !_DARWIN_C_SOURCE */
 int     getgroups(int, gid_t []);
-long    gethostid(void);
-int     gethostname(char *, size_t);
+#endif /* _DARWIN_UNLIMITED_GETGROUPS || _DARWIN_C_SOURCE */
 char   *getlogin(void);
-int     getlogin_r(char *, size_t);
-int     getopt(int, char * const [], const char *);
-pid_t   getpgid(pid_t);
 pid_t   getpgrp(void);
 pid_t   getpid(void);
 pid_t   getppid(void);
-pid_t   getsid(pid_t);
 uid_t   getuid(void);
-char   *getwd(char *);                 /* obsoleted by getcwd() */
 int     isatty(int);
-int     lchown(const char *, uid_t, gid_t) __DARWIN_ALIAS(lchown);
 int     link(const char *, const char *);
-int     lockf(int, int, off_t);
 off_t   lseek(int, off_t, int);
-int     nice(int);
 long    pathconf(const char *, int);
-int     pause(void);
+
+//Begin-Libc
+#ifndef LIBC_ALIAS_PAUSE
+//End-Libc
+int     pause(void) __DARWIN_ALIAS_C(pause);
+//Begin-Libc
+#else /* LIBC_ALIAS_PAUSE */
+int     pause(void) LIBC_ALIAS_C(pause);
+#endif /* !LIBC_ALIAS_PAUSE */
+//End-Libc
+
 int     pipe(int [2]);
-ssize_t         pread(int, void *, size_t, off_t);
-ssize_t         pwrite(int, const void *, size_t, off_t);
-ssize_t         read(int, void *, size_t);
-ssize_t  readlink(const char * __restrict, char * __restrict, size_t);
+
+//Begin-Libc
+#ifndef LIBC_ALIAS_READ
+//End-Libc
+ssize_t         read(int, void *, size_t) __DARWIN_ALIAS_C(read);
+//Begin-Libc
+#else /* LIBC_ALIAS_READ */
+ssize_t         read(int, void *, size_t) LIBC_ALIAS_C(read);
+#endif /* !LIBC_ALIAS_READ */
+//End-Libc
+
 int     rmdir(const char *);
-int     setegid(gid_t);
-int     seteuid(uid_t);
 int     setgid(gid_t);
 int     setpgid(pid_t, pid_t);
-#if __DARWIN_UNIX03
-pid_t   setpgrp(void) __DARWIN_ALIAS(setpgrp);
-#else /* !__DARWIN_UNIX03 */
-int     setpgrp(pid_t pid, pid_t pgrp);        /* obsoleted by setpgid() */
-#endif /* __DARWIN_UNIX03 */
-int     setregid(gid_t, gid_t);
-int     setreuid(uid_t, uid_t);
 pid_t   setsid(void);
 int     setuid(uid_t);
+
+//Begin-Libc
+#ifndef LIBC_ALIAS_SLEEP
+//End-Libc
 unsigned int
-        sleep(unsigned int);
-void     swab(const void * __restrict, void * __restrict, ssize_t);
-int     symlink(const char *, const char *);
-void    sync(void);
+        sleep(unsigned int) __DARWIN_ALIAS_C(sleep);
+//Begin-Libc
+#else /* LIBC_ALIAS_SLEEP */
+unsigned int
+        sleep(unsigned int) LIBC_ALIAS_C(sleep);
+#endif /* !LIBC_ALIAS_SLEEP */
+//End-Libc
+
 long    sysconf(int);
 pid_t   tcgetpgrp(int);
 int     tcsetpgrp(int, pid_t);
-int     truncate(const char *, off_t);
 char   *ttyname(int);
+
 #if __DARWIN_UNIX03
+//Begin-Libc
+#ifndef LIBC_ALIAS_TTYNAME_R
+//End-Libc
 int     ttyname_r(int, char *, size_t) __DARWIN_ALIAS(ttyname_r);
+//Begin-Libc
+#else /* LIBC_ALIAS_TTYNAME_R */
+int     ttyname_r(int, char *, size_t) LIBC_ALIAS(ttyname_r);
+#endif /* !LIBC_ALIAS_TTYNAME_R */
+//End-Libc
 #else /* !__DARWIN_UNIX03 */
 char   *ttyname_r(int, char *, size_t);
 #endif /* __DARWIN_UNIX03 */
-useconds_t
-        ualarm(useconds_t, useconds_t);
+
 int     unlink(const char *);
-int     usleep(useconds_t);
-pid_t   vfork(void);
-ssize_t         write(int, const void *, size_t);
+
+//Begin-Libc
+#ifndef LIBC_ALIAS_WRITE
+//End-Libc
+ssize_t         write(int, const void *, size_t) __DARWIN_ALIAS_C(write);
+//Begin-Libc
+#else /* LIBC_ALIAS_WRITE */
+ssize_t         write(int, const void *, size_t) LIBC_ALIAS_C(write);
+#endif /* !LIBC_ALIAS_WRITE */
+//End-Libc
+__END_DECLS
+
+
+
+/* Additional functionality provided by:
+ * POSIX.2-1992 C Language Binding Option
+ */
+
+#if __DARWIN_C_LEVEL >= 199209L
+__BEGIN_DECLS
+//Begin-Libc
+#ifndef LIBC_ALIAS_CONFSTR
+//End-Libc
+size_t  confstr(int, char *, size_t) __DARWIN_ALIAS(confstr);
+//Begin-Libc
+#else /* LIBC_ALIAS_CONFSTR */
+size_t  confstr(int, char *, size_t) LIBC_ALIAS(confstr);
+#endif /* !LIBC_ALIAS_CONFSTR */
+//End-Libc
+
+//Begin-Libc
+#ifndef LIBC_ALIAS_GETOPT
+//End-Libc
+int     getopt(int, char * const [], const char *) __DARWIN_ALIAS(getopt);
+//Begin-Libc
+#else /* LIBC_ALIAS_GETOPT */
+int     getopt(int, char * const [], const char *) LIBC_ALIAS(getopt);
+#endif /* !LIBC_ALIAS_GETOPT */
+//End-Libc
 
 extern char *optarg;                   /* getopt(3) external variables */
 extern int optind, opterr, optopt;
+__END_DECLS
+#endif /* __DARWIN_C_LEVEL >= 199209L */
 
-#ifndef        _POSIX_C_SOURCE
-#include <sys/select.h>
 
-void    _Exit(int) __dead2;
-int     accessx_np(const struct accessx_descriptor *, size_t, int *, uid_t);
-int     acct(const char *);
-int     add_profil(char *, size_t, unsigned long, unsigned int);
-int     async_daemon(void);
+
+/* Additional functionality provided by:
+ * POSIX.1c-1995,
+ * POSIX.1i-1995,
+ * and the omnibus ISO/IEC 9945-1: 1996
+ */
+
+#if __DARWIN_C_LEVEL >= 199506L
+                               /* These F_* are really XSI or Issue 6 */
+#define F_ULOCK         0      /* unlock locked section */
+#define        F_LOCK          1      /* lock a section for exclusive use */
+#define        F_TLOCK         2      /* test and lock a section for exclusive use */
+#define        F_TEST          3      /* test a section for locks by other procs */
+
+ __BEGIN_DECLS
+
+/* Begin XSI */
+/* Removed in Issue 6 */
+#if !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 200112L
 void   *brk(const void *);
-int     chroot(const char *);
+int     chroot(const char *) __POSIX_C_DEPRECATED(199506L);
+#endif
+
+char   *crypt(const char *, const char *);
+#ifndef __CTERMID_DEFINED
+/* Multiply defined in stdio.h and unistd.h by SUS */
+#define __CTERMID_DEFINED 1
+char    *ctermid(char *);
+#endif
 #if __DARWIN_UNIX03
+//Begin-Libc
+#ifndef LIBC_ALIAS_ENCRYPT
+//End-Libc
 void    encrypt(char *, int) __DARWIN_ALIAS(encrypt);
+//Begin-Libc
+#else /* LIBC_ALIAS_ENCRYPT */
+void    encrypt(char *, int) LIBC_ALIAS(encrypt);
+#endif /* !LIBC_ALIAS_ENCRYPT */
+//End-Libc
 #else /* !__DARWIN_UNIX03 */
 int     encrypt(char *, int);
 #endif /* __DARWIN_UNIX03 */
+int     fchdir(int);
+long    gethostid(void);
+pid_t   getpgid(pid_t);
+pid_t   getsid(pid_t);
+
+/* Removed in Issue 6 */
+#if !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 200112L
+int     getdtablesize(void) __POSIX_C_DEPRECATED(199506L);
+int     getpagesize(void) __pure2 __POSIX_C_DEPRECATED(199506L);
+char   *getpass(const char *) __POSIX_C_DEPRECATED(199506L);
+#endif
+
+/* Removed in Issue 7 */
+#if !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 200809L
+char   *getwd(char *) __POSIX_C_DEPRECATED(200112L); /* obsoleted by getcwd() */
+#endif
+
+//Begin-Libc
+#ifndef LIBC_ALIAS_LCHOWN
+//End-Libc
+int     lchown(const char *, uid_t, gid_t) __DARWIN_ALIAS(lchown);
+//Begin-Libc
+#else /* LIBC_ALIAS_LCHOWN */
+int     lchown(const char *, uid_t, gid_t) LIBC_ALIAS(lchown);
+#endif /* !LIBC_ALIAS_LCHOWN */
+//End-Libc
+
+//Begin-Libc
+#ifndef LIBC_ALIAS_LOCKF
+//End-Libc
+int     lockf(int, int, off_t) __DARWIN_ALIAS_C(lockf);
+//Begin-Libc
+#else /* LIBC_ALIAS_LOCKF */
+int     lockf(int, int, off_t) LIBC_ALIAS_C(lockf);
+#endif /* !LIBC_ALIAS_LOCKF */
+//End-Libc
+
+//Begin-Libc
+#ifndef LIBC_ALIAS_NICE
+//End-Libc
+int     nice(int) __DARWIN_ALIAS(nice);
+//Begin-Libc
+#else /* LIBC_ALIAS_NICE */
+int     nice(int) LIBC_ALIAS(nice);
+#endif /* !LIBC_ALIAS_NICE */
+//End-Libc
+
+//Begin-Libc
+#ifndef LIBC_ALIAS_PREAD
+//End-Libc
+ssize_t         pread(int, void *, size_t, off_t) __DARWIN_ALIAS_C(pread);
+//Begin-Libc
+#else /* LIBC_ALIAS_PREAD */
+ssize_t         pread(int, void *, size_t, off_t) LIBC_ALIAS_C(pread);
+#endif /* !LIBC_ALIAS_PREAD */
+//End-Libc
+
+//Begin-Libc
+#ifndef LIBC_ALIAS_PWRITE
+//End-Libc
+ssize_t         pwrite(int, const void *, size_t, off_t) __DARWIN_ALIAS_C(pwrite);
+//Begin-Libc
+#else /* LIBC_ALIAS_PWRITE */
+ssize_t         pwrite(int, const void *, size_t, off_t) LIBC_ALIAS_C(pwrite);
+#endif /* !LIBC_ALIAS_PWRITE */
+//End-Libc
+
+/* Removed in Issue 6 */
+#if !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 200112L
+/* Note that Issue 5 changed the argument as intprt_t,
+ * but we keep it as int for binary compatability. */
+void   *sbrk(int);
+#endif
+
+#if __DARWIN_UNIX03
+//Begin-Libc
+#ifndef LIBC_ALIAS_SETPGRP
+//End-Libc
+pid_t   setpgrp(void) __DARWIN_ALIAS(setpgrp);
+//Begin-Libc
+#else /* LIBC_ALIAS_SETPGRP */
+pid_t   setpgrp(void) LIBC_ALIAS(setpgrp);
+#endif /* !LIBC_ALIAS_SETPGRP */
+//End-Libc
+#else /* !__DARWIN_UNIX03 */
+int     setpgrp(pid_t pid, pid_t pgrp);        /* obsoleted by setpgid() */
+#endif /* __DARWIN_UNIX03 */
+
+//Begin-Libc
+#ifndef LIBC_ALIAS_SETREGID
+//End-Libc
+int     setregid(gid_t, gid_t) __DARWIN_ALIAS(setregid);
+//Begin-Libc
+#else /* LIBC_ALIAS_SETREGID */
+int     setregid(gid_t, gid_t) LIBC_ALIAS(setregid);
+#endif /* !LIBC_ALIAS_SETREGID */
+//End-Libc
+
+//Begin-Libc
+#ifndef LIBC_ALIAS_SETREUID
+//End-Libc
+int     setreuid(uid_t, uid_t) __DARWIN_ALIAS(setreuid);
+//Begin-Libc
+#else /* LIBC_ALIAS_SETREUID */
+int     setreuid(uid_t, uid_t) LIBC_ALIAS(setreuid);
+#endif /* !LIBC_ALIAS_SETREUID */
+//End-Libc
+
+void     swab(const void * __restrict, void * __restrict, ssize_t);
+void    sync(void);
+int     truncate(const char *, off_t);
+useconds_t      ualarm(useconds_t, useconds_t);
+//Begin-Libc
+#ifndef LIBC_ALIAS_USLEEP
+//End-Libc
+int     usleep(useconds_t) __DARWIN_ALIAS_C(usleep);
+//Begin-Libc
+#else /* LIBC_ALIAS_USLEEP */
+int     usleep(useconds_t) LIBC_ALIAS_C(usleep);
+#endif /* !LIBC_ALIAS_USLEEP */
+//End-Libc
+pid_t   vfork(void);
+/* End XSI */
+
+//Begin-Libc
+#ifndef LIBC_ALIAS_FSYNC
+//End-Libc
+int     fsync(int) __DARWIN_ALIAS_C(fsync);
+//Begin-Libc
+#else /* LIBC_ALIAS_FSYNC */
+int     fsync(int) LIBC_ALIAS_C(fsync);
+#endif /* !LIBC_ALIAS_FSYNC */
+//End-Libc
+
+int     ftruncate(int, off_t);
+int     getlogin_r(char *, size_t);
+__END_DECLS
+#endif /* __DARWIN_C_LEVEL >= 199506L */
+
+
+
+/* Additional functionality provided by:
+ * POSIX.1-2001
+ * ISO C99
+ */
+
+#if __DARWIN_C_LEVEL >= 200112L
+__BEGIN_DECLS
+int     fchown(int, uid_t, gid_t);
+int     gethostname(char *, size_t);
+ssize_t  readlink(const char * __restrict, char * __restrict, size_t);
+int     setegid(gid_t);
+int     seteuid(uid_t);
+int     symlink(const char *, const char *);
+__END_DECLS
+#endif /* __DARWIN_C_LEVEL >= 200112L */
+
+
+
+/* Darwin extensions */
+
+#if __DARWIN_C_LEVEL >= __DARWIN_C_FULL
+#include <sys/select.h>
+
+#ifndef _DEV_T
+#define        _DEV_T
+typedef __darwin_dev_t         dev_t;
+#endif
+
+#ifndef _MODE_T
+#define        _MODE_T
+typedef __darwin_mode_t                mode_t;
+#endif
+
+#ifndef _UUID_T
+#define        _UUID_T
+typedef __darwin_uuid_t                uuid_t;
+#endif /* _UUID_T */
+
+__BEGIN_DECLS
+void    _Exit(int) __dead2;
+int     accessx_np(const struct accessx_descriptor *, size_t, int *, uid_t);
+int     acct(const char *);
+int     add_profil(char *, size_t, unsigned long, unsigned int);
 void    endusershell(void);
 int     execvP(const char *, const char *, char * const *);
 char   *fflagstostr(unsigned long);
-int     fsync(int);
-int     getdtablesize(void);
 int     getdomainname(char *, int);
 int     getgrouplist(const char *, int, int *, int *);
+int     gethostuuid(uuid_t, const struct timespec *) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
 mode_t  getmode(const void *, mode_t);
-int     getpagesize(void) __pure2;
-char   *getpass(const char *);
 int     getpeereid(int, uid_t *, gid_t *);
-int     getpgid(pid_t _pid);
 int     getsgroups_np(int *, uuid_t);
-int     getsid(pid_t _pid);
 char   *getusershell(void);
 int     getwgroups_np(int *, uuid_t);
 int     initgroups(const char *, int);
 int     iruserok(unsigned long, int, const char *, const char *);
+int     iruserok_sa(const void *, int, int, const char *, const char *);
 int     issetugid(void);
 char   *mkdtemp(char *);
 int     mknod(const char *, mode_t, dev_t);
+int     mkpath_np(const char *path, mode_t omode) __OSX_AVAILABLE_STARTING(__MAC_10_8, __IPHONE_5_0); /* returns errno */
 int     mkstemp(char *);
 int     mkstemps(char *, int);
 char   *mktemp(char *);
@@ -523,23 +860,40 @@ int        profil(char *, size_t, unsigned long, unsigned int);
 int     pthread_setugid_np(uid_t, gid_t);
 int     pthread_getugid_np( uid_t *, gid_t *);
 int     rcmd(char **, int, const char *, const char *, const char *, int *);
+int     rcmd_af(char **, int, const char *, const char *, const char *, int *,
+               int);
 int     reboot(int);
 int     revoke(const char *);
 int     rresvport(int *);
 int     rresvport_af(int *, int);
 int     ruserok(const char *, int, const char *, const char *);
-void   *sbrk(int);
 int     setdomainname(const char *, int);
 int     setgroups(int, const gid_t *);
 void    sethostid(long);
 int     sethostname(const char *, int);
 #if __DARWIN_UNIX03
+//Begin-Libc
+#ifndef LIBC_ALIAS_SETKEY
+//End-Libc
 void    setkey(const char *) __DARWIN_ALIAS(setkey);
+//Begin-Libc
+#else /* LIBC_ALIAS_SETKEY */
+void    setkey(const char *) LIBC_ALIAS(setkey);
+#endif /* !LIBC_ALIAS_SETKEY */
+//End-Libc
 #else /* !__DARWIN_UNIX03 */
 int     setkey(const char *);
 #endif /* __DARWIN_UNIX03 */
 int     setlogin(const char *);
-void   *setmode(const char *);
+//Begin-Libc
+#ifndef LIBC_ALIAS_SETMODE
+//End-Libc
+void   *setmode(const char *) __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_2_0, __DARWIN_ALIAS(setmode));
+//Begin-Libc
+#else /* LIBC_ALIAS_SETMODE */
+void   *setmode(const char *) LIBC_ALIAS(setmode);
+#endif /* !LIBC_ALIAS_SETMODE */
+//End-Libc
 int     setrgid(gid_t);
 int     setruid(uid_t);
 int     setsgroups_np(int, const uuid_t);
@@ -558,28 +912,71 @@ int        getsubopt(char **, char * const *, char **);
 
 /*  HFS & HFS Plus semantics system calls go here */
 #ifdef __LP64__
+int    fgetattrlist(int,void*,void*,size_t,unsigned int) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+int    fsetattrlist(int,void*,void*,size_t,unsigned int) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+//Begin-Libc
+#ifndef LIBC_ALIAS_GETATTRLIST
+//End-Libc
 int    getattrlist(const char*,void*,void*,size_t,unsigned int) __DARWIN_ALIAS(getattrlist);
+//Begin-Libc
+#else /* LIBC_ALIAS_GETATTRLIST */
+int    getattrlist(const char*,void*,void*,size_t,unsigned int) LIBC_ALIAS(getattrlist);
+#endif /* !LIBC_ALIAS_GETATTRLIST */
+//End-Libc
+//Begin-Libc
+#ifndef LIBC_ALIAS_SETATTRLIST
+//End-Libc
 int    setattrlist(const char*,void*,void*,size_t,unsigned int) __DARWIN_ALIAS(setattrlist);
+//Begin-Libc
+#else /* LIBC_ALIAS_SETATTRLIST */
+int    setattrlist(const char*,void*,void*,size_t,unsigned int) LIBC_ALIAS(setattrlist);
+#endif /* !LIBC_ALIAS_SETATTRLIST */
+//End-Libc
 int exchangedata(const char*,const char*,unsigned int);
-int    checkuseraccess(const char*,uid_t,gid_t*,int,int,unsigned int);
 int    getdirentriesattr(int,void*,void*,size_t,unsigned int*,unsigned int*,unsigned int*,unsigned int);
-int    searchfs(const char*,void*,void*,unsigned int,unsigned int,void*);
 
-int fsctl(const char *,unsigned int,void*,unsigned int);
 #else /* __LP64__ */
+int    fgetattrlist(int,void*,void*,size_t,unsigned long) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+int    fsetattrlist(int,void*,void*,size_t,unsigned long) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+//Begin-Libc
+#ifndef LIBC_ALIAS_GETATTRLIST
+//End-Libc
 int    getattrlist(const char*,void*,void*,size_t,unsigned long) __DARWIN_ALIAS(getattrlist);
+//Begin-Libc
+#else /* LIBC_ALIAS_GETATTRLIST */
+int    getattrlist(const char*,void*,void*,size_t,unsigned long) LIBC_ALIAS(getattrlist);
+#endif /* !LIBC_ALIAS_GETATTRLIST */
+//End-Libc
+//Begin-Libc
+#ifndef LIBC_ALIAS_SETATTRLIST
+//End-Libc
 int    setattrlist(const char*,void*,void*,size_t,unsigned long) __DARWIN_ALIAS(setattrlist);
+//Begin-Libc
+#else /* LIBC_ALIAS_SETATTRLIST */
+int    setattrlist(const char*,void*,void*,size_t,unsigned long) LIBC_ALIAS(setattrlist);
+#endif /* !LIBC_ALIAS_SETATTRLIST */
+//End-Libc
 int exchangedata(const char*,const char*,unsigned long);
-int    checkuseraccess(const char*,uid_t,gid_t*,int,int,unsigned long);
 int    getdirentriesattr(int,void*,void*,size_t,unsigned long*,unsigned long*,unsigned long*,unsigned long);
-int    searchfs(const char*,void*,void*,unsigned long,unsigned long,void*);
 
-int fsctl(const char *,unsigned long,void*,unsigned long);             
 #endif /* __LP64__ */
 
+struct fssearchblock;
+struct searchstate;
+
+int     searchfs(const char *, struct fssearchblock *, unsigned long *, unsigned int, unsigned int, struct searchstate *);
+int     fsctl(const char *,unsigned long,void*,unsigned int);
+int     ffsctl(int,unsigned long,void*,unsigned int) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+#define        SYNC_VOLUME_FULLSYNC    0x01    /* Flush data and metadata to platter, not just to disk cache */
+#define SYNC_VOLUME_WAIT       0x02    /* Wait for sync to complete */
+
+int    fsync_volume_np(int, int) __OSX_AVAILABLE_STARTING(__MAC_10_8, __IPHONE_6_0);
+int    sync_volume_np(const char *, int) __OSX_AVAILABLE_STARTING(__MAC_10_8, __IPHONE_6_0);
+
 extern int optreset;
 
-#endif /* !_POSIX_C_SOURCE */
 __END_DECLS
+#endif /* __DARWIN_C_LEVEL >= __DARWIN_C_FULL */
 
-#endif /* !_UNISTD_H_ */
+#endif /* _UNISTD_H_ */