+#if defined(HAVE_STRUCT_TIMESPEC) && _POSIX_C_SOURCE >= 199309L
+int
+Mono_Posix_Syscall_nanosleep (struct Mono_Posix_Timespec *req,
+ struct Mono_Posix_Timespec *rem)
+{
+ struct timespec _req, _rem, *prem = NULL;
+ int r;
+
+ if (req == NULL) {
+ errno = EFAULT;
+ return -1;
+ }
+
+ if (Mono_Posix_FromTimespec (req, &_req) == -1)
+ return -1;
+
+ if (rem) {
+ if (Mono_Posix_FromTimespec (rem, &_rem) == -1)
+ return -1;
+ prem = &_rem;
+ }
+
+ r = nanosleep (&_req, prem);
+
+ if (rem && Mono_Posix_ToTimespec (prem, rem) == -1)
+ return -1;
+
+ return r;
+}
+#endif
+