diff --git a/abstractions.h b/abstractions.h new file mode 100644 index 0000000..eb5ea63 --- /dev/null +++ b/abstractions.h @@ -0,0 +1,40 @@ +#ifdef __APPLE__ + +// OS X +#include + +typedef dispatch_semaphore_t bindings_sem_t; + +NAN_INLINE static int semaphore_init (dispatch_semaphore_t *sem) { + *sem = dispatch_semaphore_create(0); + return *sem == NULL ? -1 : 0; +} + +NAN_INLINE static void semaphore_wait (dispatch_semaphore_t *sem) { + dispatch_semaphore_wait(*sem, DISPATCH_TIME_FOREVER); +} + +NAN_INLINE static void semaphore_signal (dispatch_semaphore_t *sem) { + dispatch_semaphore_signal(*sem); +} + +#else + +// Linux and whatnot +#include + +typedef sem_t bindings_sem_t; + +NAN_INLINE static int semaphore_init (sem_t *sem) { + return sem_init(sem, 0, 0); +} + +NAN_INLINE static void semaphore_wait (sem_t *sem) { + sem_wait(sem); +} + +NAN_INLINE static void semaphore_signal (sem_t *sem) { + sem_post(sem); +} + +#endif diff --git a/fuse-bindings.cc b/fuse-bindings.cc index b56b978..0afa0ad 100644 --- a/fuse-bindings.cc +++ b/fuse-bindings.cc @@ -5,7 +5,6 @@ #include #include #include -#include #include #include #include @@ -18,6 +17,8 @@ #include #endif +#include "abstractions.h" + using namespace v8; enum bindings_ops_t { @@ -74,11 +75,7 @@ struct bindings_t { char mnt[1024]; char mntopts[1024]; pthread_t thread; -#ifdef __APPLE__ - dispatch_semaphore_t semaphore; -#else - sem_t semaphore; -#endif + bindings_sem_t semaphore; uv_async_t async; // methods @@ -138,33 +135,6 @@ static bindings_t *bindings_mounted[1024]; static int bindings_mounted_count = 0; static bindings_t *bindings_current = NULL; -#ifdef __APPLE__ -NAN_INLINE static int semaphore_init (dispatch_semaphore_t *sem) { - *sem = dispatch_semaphore_create(0); - return *sem == NULL ? -1 : 0; -} - -NAN_INLINE static void semaphore_wait (dispatch_semaphore_t *sem) { - dispatch_semaphore_wait(*sem, DISPATCH_TIME_FOREVER); -} - -NAN_INLINE static void semaphore_signal (dispatch_semaphore_t *sem) { - dispatch_semaphore_signal(*sem); -} -#else -NAN_INLINE static int semaphore_init (sem_t *sem) { - return sem_init(sem, 0, 0); -} - -NAN_INLINE static void semaphore_wait (sem_t *sem) { - sem_wait(sem); -} - -NAN_INLINE static void semaphore_signal (sem_t *sem) { - sem_post(sem); -} -#endif - static bindings_t *bindings_find_mounted (char *path) { for (int i = 0; i < bindings_mounted_count; i++) { bindings_t *b = bindings_mounted[i]; @@ -1261,4 +1231,4 @@ void Init(Handle exports) { exports->Set(NanNew("populateContext"), NanNew(PopulateContext)->GetFunction()); } -NODE_MODULE(fuse_bindings, Init) \ No newline at end of file +NODE_MODULE(fuse_bindings, Init)