packages feed

hourglass-0.2.3: cbits/unix.c

/*
 * lowlevel binder for macosx and 
 */
#include <time.h>
#if defined __MACH__ && !defined __GNU__
#include <mach/clock.h>
#include <mach/mach.h>
#endif

/* on mac os X, clock_gettime doesn't exists, but
 * http://stackoverflow.com/questions/5167269/clock-gettime-alternative-in-mac-os-x
 *
 * we ignore errors as it's very very unlikely considering the hardcoded ID
 * and the fact that haskell should call this code.
 */
void hourglass_clock_calendar(struct timespec *timespec)
{
#if defined __MACH__ && !defined __GNU__
	clock_serv_t cclock;
	mach_timespec_t mts;

	host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);
	clock_get_time(cclock, &mts);
	mach_port_deallocate(mach_task_self(), cclock);

	timespec->tv_sec = mts.tv_sec;
	timespec->tv_nsec = mts.tv_nsec;
#else
	clock_gettime(CLOCK_REALTIME, timespec);
#endif
}