(module nanosleep (nanosleep) (import (scheme) (chicken foreign)) (foreign-declare " #include #include ") (define nanosleep (foreign-lambda* bool ((int seconds) (long nanoseconds)) " struct timespec req, rem; req.tv_sec = seconds; req.tv_nsec = nanoseconds; rem.tv_sec = rem.tv_nsec = 0; errno = 0; if (nanosleep(&req, &rem) == 0) { C_return(1); } if (errno != EINTR) { C_return(0); } /* try to sleep the remaining time, once only */ const int rc = nanosleep(&rem, NULL); C_return(rc == 0 ? 1 : 0); " )) )