+ sthread_disable();
+ int res = sthread_sem_trywait((sthread_sem_t*)sem);
+ sthread_enable();
+ return res;
+}
+int sem_timedwait(sem_t* sem, const struct timespec* abs_timeout)
+{
+ if (raw_sem_timedwait == NULL)
+ intercepter_init();
+
+ if (sthread_inside_simgrid)
+ return raw_sem_timedwait(sem, abs_timeout);
+
+ sthread_disable();
+ int res = sthread_sem_timedwait((sthread_sem_t*)sem, abs_timeout);
+ sthread_enable();
+ return res;
+}
+
+/* Glibc < 2.31 uses type "struct timezone *" for the second parameter of gettimeofday.
+ Other implementations use "void *" instead. */
+#ifdef __GLIBC__
+#if !__GLIBC_PREREQ(2, 31)
+#define TIMEZONE_TYPE struct timezone
+#endif
+#endif
+#ifndef TIMEZONE_TYPE
+#define TIMEZONE_TYPE void
+#endif
+
+int gettimeofday(struct timeval* tv, XBT_ATTRIB_UNUSED TIMEZONE_TYPE* tz)
+{
+ if (raw_gettimeofday == NULL)
+ intercepter_init();
+
+ if (sthread_inside_simgrid)
+ return raw_gettimeofday(tv, tz);
+
+ sthread_disable();
+ int res = sthread_gettimeofday(tv);
+ sthread_enable();
+ return res;
+}
+
+unsigned int sleep(unsigned int seconds)
+{
+ if (raw_sleep == NULL)
+ intercepter_init();
+
+ if (sthread_inside_simgrid)
+ return raw_sleep(seconds);
+
+ sthread_disable();
+ sthread_sleep(seconds);
+ sthread_enable();
+ return 0;
+}
+
+int usleep(useconds_t usec)
+{
+ if (raw_usleep == NULL)
+ intercepter_init();
+
+ if (sthread_inside_simgrid)
+ return raw_usleep(usec);
+
+ sthread_disable();
+ sthread_sleep(((double)usec) / 1000000.);
+ sthread_enable();
+ return 0;
+}
+
+#if 0