10 #define TEST(c, ...) \
11 ( (c) || (error(#c " failed: " __VA_ARGS__),0) )
20 clock_gettime(CLOCK_REALTIME, &ts);
21 snprintf(buf, sizeof buf, "/testsuite-%d-%d", (int)getpid(), (int)ts.tv_nsec);
23 TEST((sem=sem_open(buf, O_CREAT|O_EXCL, 0700, 1)) != SEM_FAILED,
24 "could not open sem: %s\n", strerror(errno));
26 TEST(sem_open(buf, O_CREAT|O_EXCL, 0700, 1) == SEM_FAILED,
27 "reopening should fail with O_EXCL\n");
29 "after reopen failure errno is \"%s\" (%d); want EEXIST (%d)\n", strerror(errno), errno, EEXIST);
32 TEST(sem_getvalue(sem, &val) == 0, "failed to get sem value\n");
33 TEST(val == 1, "wrong initial semaphore value: %d\n", val);
35 TEST((sem2=sem_open(buf, 0)) == sem,
36 "could not reopen sem: got %p, want %p\n", sem2, sem);
38 TEST(sem_wait(sem) == 0, "%s\n", strerror(errno));
39 TEST(sem_getvalue(sem2, &val) == 0, "%s\n", strerror(errno));
40 TEST(val == 0, "wrong semaphore value on second handle: %d\n", val);
42 TEST(sem_post(sem) == 0, "%s\n", strerror(errno));
43 TEST(sem_getvalue(sem2, &val) == 0, "%s\n", strerror(errno));
44 TEST(val == 1, "wrong semaphore value on second handle: %d\n", val);
46 TEST(sem_close(sem) == 0, "%s\n", strerror(errno));
47 TEST(sem_close(sem) == 0, "%s\n", strerror(errno));
48 TEST(sem_unlink(buf) == 0, "%s\n", strerror(errno));