#ifndef _POSIX_PTHREAD_H
#define _POSIX_PTHREAD_H
#ifndef __POSIX_LIB__
#include <pthread_impl.h>
#endif
#include <errno.h>
#include <sched.h>
#include <time.h>
#include <mach/mach_types.h>
#include <unistd.h>
#include <limits.h>
#undef _POSIX_THREAD_PROCESS_SHARED
#undef _POSIX_THREAD_SAFE_FUNCTIONS
#include <sys/cdefs.h>
__BEGIN_DECLS
#define pthread_cleanup_push(func, val) \
{ \
struct _pthread_handler_rec __handler; \
pthread_t __self = pthread_self(); \
__handler.routine = func; \
__handler.arg = val; \
__handler.next = __self->cleanup_stack; \
__self->cleanup_stack = &__handler;
#define pthread_cleanup_pop(execute) \
\
__self->cleanup_stack = __handler.next; \
if (execute) (__handler.routine)(__handler.arg); \
}
#define PTHREAD_CREATE_JOINABLE 1
#define PTHREAD_CREATE_DETACHED 2
#define PTHREAD_INHERIT_SCHED 1
#define PTHREAD_EXPLICIT_SCHED 2
#define PTHREAD_CANCEL_ENABLE 0x01
#define PTHREAD_CANCEL_DISABLE 0x00
#define PTHREAD_CANCEL_DEFERRED 0x02
#define PTHREAD_CANCEL_ASYNCHRONOUS 0x00
#define PTHREAD_SCOPE_SYSTEM 1
#define PTHREAD_SCOPE_PROCESS 2
#if !defined(ENOTSUP)
#define ENOTSUP 89
#endif
#define PTHREAD_PRIO_NONE 0
#define PTHREAD_PRIO_INHERIT 1
#define PTHREAD_PRIO_PROTECT 2
#define PTHREAD_MUTEX_INITIALIZER {_PTHREAD_MUTEX_SIG_init}
#define PTHREAD_COND_INITIALIZER {_PTHREAD_COND_SIG_init}
#define PTHREAD_ONCE_INIT {_PTHREAD_ONCE_SIG_init}
#include <sys/time.h>
int pthread_attr_destroy __P((pthread_attr_t *attr));
int pthread_attr_getdetachstate __P((const pthread_attr_t *attr,
int *detachstate));
int pthread_attr_getinheritsched __P((const pthread_attr_t *attr,
int *inheritsched));
int pthread_attr_getschedparam __P((const pthread_attr_t *attr,
struct sched_param *param));
int pthread_attr_getschedpolicy __P((const pthread_attr_t *attr,
int *policy));
int pthread_attr_getstackaddr __P((const pthread_attr_t *attr,
void **stackaddr));
int pthread_attr_getstacksize __P((const pthread_attr_t *attr,
size_t *stacksize));
int pthread_attr_init __P((pthread_attr_t *attr));
int pthread_attr_setdetachstate __P((pthread_attr_t *attr,
int detachstate));
int pthread_attr_setinheritsched __P((pthread_attr_t *attr,
int inheritsched));
int pthread_attr_setschedparam __P((pthread_attr_t *attr,
const struct sched_param *param));
int pthread_attr_setschedpolicy __P((pthread_attr_t *attr,
int policy));
int pthread_attr_setstackaddr __P((pthread_attr_t *attr,
void *stackaddr));
int pthread_attr_setstacksize __P((pthread_attr_t *attr,
size_t stacksize));
int pthread_cancel __P((pthread_t thread));
int pthread_setcancelstate __P((int state, int *oldstate));
int pthread_setcanceltype __P((int type, int *oldtype));
void pthread_testcancel __P((void));
int pthread_cond_broadcast __P((pthread_cond_t *cond));
int pthread_cond_destroy __P((pthread_cond_t *cond));
int pthread_cond_init __P((pthread_cond_t *cond,
const pthread_condattr_t *attr));
int pthread_cond_signal __P((pthread_cond_t *cond));
int pthread_cond_wait __P((pthread_cond_t *cond,
pthread_mutex_t *mutex));
int pthread_cond_timedwait __P((pthread_cond_t *cond,
pthread_mutex_t *mutex,
const struct timespec *abstime));
int pthread_cond_timedwait_relative_np __P((pthread_cond_t *cond,
pthread_mutex_t *mutex,
const struct timespec *reltime));
int pthread_create __P((pthread_t *thread,
const pthread_attr_t *attr,
void *(*start_routine)(void *),
void *arg));
int pthread_detach __P((pthread_t thread));
int pthread_equal __P((pthread_t t1,
pthread_t t2));
void pthread_exit __P((void *value_ptr));
int pthread_getschedparam __P((pthread_t thread,
int *policy,
struct sched_param *param));
int pthread_join __P((pthread_t thread,
void **value_ptr));
int pthread_mutex_destroy __P((pthread_mutex_t *mutex));
int pthread_mutex_getprioceiling __P((const pthread_mutex_t *mutex,
int *prioceiling));
int pthread_mutex_init __P((pthread_mutex_t *mutex,
const pthread_mutexattr_t *attr));
int pthread_mutex_lock __P((pthread_mutex_t *mutex));
int pthread_mutex_setprioceiling __P((pthread_mutex_t *mutex,
int prioceiling,
int *old_prioceiling));
int pthread_mutex_trylock __P((pthread_mutex_t *mutex));
int pthread_mutex_unlock __P((pthread_mutex_t *mutex));
int pthread_mutexattr_destroy __P((pthread_mutexattr_t *attr));
int pthread_mutexattr_getprioceiling __P((const pthread_mutexattr_t *attr,
int *prioceiling));
int pthread_mutexattr_getprotocol __P((const pthread_mutexattr_t *attr,
int *protocol));
int pthread_mutexattr_init __P((pthread_mutexattr_t *attr));
int pthread_mutexattr_setprioceiling __P((pthread_mutexattr_t *attr,
int prioceiling));
int pthread_mutexattr_setprotocol __P((pthread_mutexattr_t *attr,
int protocol));
int pthread_once __P((pthread_once_t *once_control,
void (*init_routine)(void)));
pthread_t pthread_self __P((void));
int pthread_setschedparam __P((pthread_t thread,
int policy,
const struct sched_param *param));
int pthread_key_create __P((pthread_key_t *key,
void (*destructor)(void *)));
int pthread_key_delete __P((pthread_key_t key));
int pthread_setspecific __P((pthread_key_t key,
const void *value));
void *pthread_getspecific __P((pthread_key_t key));
int pthread_attr_getscope __P((pthread_attr_t *, int *));
int pthread_attr_setscope __P((pthread_attr_t *, int));
int pthread_is_threaded_np __P((void));
mach_port_t pthread_mach_thread_np __P((pthread_t));
size_t pthread_get_stacksize_np __P((pthread_t));
void * pthread_get_stackaddr_np __P((pthread_t));
int pthread_cond_signal_thread_np __P((pthread_cond_t *, pthread_t));
int pthread_create_suspended_np __P((pthread_t *thread,
const pthread_attr_t *attr,
void *(*start_routine)(void *),
void *arg));
__END_DECLS
#endif