1 /* 2 * Copyright (c) 2006-2008 Amit Singh/Google Inc. 3 * Copyright (c) 2011-2013 Benjamin Fleischer 4 */ 5 6 #ifndef _DARWIN_COMPAT_ 7 #define _DARWIN_COMPAT_ 8 9 #include <pthread.h> 10 11 /* Semaphores */ 12 13 typedef struct darwin_sem { 14 int id; 15 union { 16 struct 17 { 18 unsigned int count; 19 pthread_mutex_t count_lock; 20 pthread_cond_t count_cond; 21 } local; 22 } __data; 23 } darwin_sem_t; 24 25 #define DARWIN_SEM_VALUE_MAX ((int32_t)32767) 26 27 int darwin_sem_init(darwin_sem_t *sem, int pshared, unsigned int value); 28 int darwin_sem_destroy(darwin_sem_t *sem); 29 int darwin_sem_getvalue(darwin_sem_t *sem, unsigned int *value); 30 int darwin_sem_post(darwin_sem_t *sem); 31 int darwin_sem_timedwait(darwin_sem_t *sem, const struct timespec *abs_timeout); 32 int darwin_sem_trywait(darwin_sem_t *sem); 33 int darwin_sem_wait(darwin_sem_t *sem); 34 35 /* Caller must not include <semaphore.h> */ 36 37 typedef darwin_sem_t sem_t; 38 39 #define sem_init(s, p, v) darwin_sem_init(s, p, v) 40 #define sem_destroy(s) darwin_sem_destroy(s) 41 #define sem_getvalue(s, v) darwin_sem_getvalue(s, v) 42 #define sem_post(s) darwin_sem_post(s) 43 #define sem_timedwait(s, t) darwin_sem_timedwait(s, t) 44 #define sem_trywait(s) darwin_sem_trywait(s) 45 #define sem_wait(s) darwin_sem_wait(s) 46 47 #define SEM_VALUE_MAX DARWIN_SEM_VALUE_MAX 48 49 #endif /* _DARWIN_COMPAT_ */ 50