#ifdef MACOSX
/*******************************************************************
* This is a bad hack, since a mutex is owned by the locker,
* while a semaphore not. So we use a passing le baton technique
* with mutex. This seems to work on macosx that lacks
* semaphore implementation. But is not semantically correct.
*******************************************************************/
#define sem_t pthread_mutex_t
#define sem_wait(s) pthread_mutex_lock(s)
#define sem_post(s) pthread_mutex_unlock(s)
#define sem_init(s,a,b) (__extension__(\
{\
pthread_mutex_t __tmp = PTHREAD_MUTEX_INITIALIZER;\
*(s) = __tmp;\
if((b) == 0)\
pthread_mutex_lock(s);\
if((b) > 1 || (b) < 0 )\
abort();\
0;\
}\
))
#define sem_destroy(s) pthread_mutex_destroy(s)
#define snprintf(a,b,c...) (__extension__ \
({ \
int __result; \
if ( a == NULL && b == 0) \
__result = c99_snprintf(c); \
else \
__result = snprintf(a,b,c); \
__result; }))
#define vsnprintf(a,b,c,d) (__extension__ \
({ \
int __result; \
if ( a == NULL && b == 0) \
__result = c99_vsnprintf(c,d);\
else \
__result = vsnprintf(a,b,c,d); \
__result; }))
#endif
syntax highlighted by Code2HTML, v. 0.9.1