#include #include #include #include #include #include static int do_test (void) { union { sem_t s; struct new_sem ns; } u; if (sem_init (&u.s, 0, 0) != 0) { puts ("sem_init failed"); return 1; } struct timespec ts = { 0, 1000000001 }; /* Invalid. */ errno = 0; if (sem_timedwait (&u.s, &ts) >= 0) { puts ("sem_timedwait did not fail"); return 1; } if (errno != EINVAL) { perror ("sem_timedwait did not fail with EINVAL"); return 1; } if (u.ns.nwaiters != 0) { printf ("sem_timedwait modified nwaiters: %ld\n", u.ns.nwaiters); return 1; } ts.tv_sec = /* Invalid. */ -2; ts.tv_nsec = 0; errno = 0; if (sem_timedwait (&u.s, &ts) >= 0) { puts ("2nd sem_timedwait did not fail"); return 1; } if (errno != ETIMEDOUT) { perror ("2nd sem_timedwait did not fail with ETIMEDOUT"); return 1; } if (u.ns.nwaiters != 0) { printf ("2nd sem_timedwait modified nwaiters: %ld\n", u.ns.nwaiters); return 1; } return 0; } #define TEST_FUNCTION do_test () #include "../test-skeleton.c"