#include #include #include int cnd_timedwait_base(cnd_t *restrict c, mtx_t *restrict m, int time_base, const struct timespec *restrict ts) { clockid_t clock = CLOCK_REALTIME; switch (time_base) { case TIME_UTC: clock = CLOCK_REALTIME; break; case TIME_MONOTONIC: clock = CLOCK_MONOTONIC; break; default: return thrd_error; } int ret = pthread_cond_clockwait((pthread_cond_t *)c, (pthread_mutex_t *)m, clock, ts); switch (ret) { /* May also return EINVAL or EPERM. */ default: return thrd_error; case 0: return thrd_success; case ETIMEDOUT: return thrd_timedout; } }