Properly use union semun as argument of semctl. * tests/ipc_sem.c (main): Properly use union semun as argument of semctl. Don't handle EFAULT specially. * tests/ipc_sem.test: Revert last change. --- tests/ipc_sem.c | 24 ++++++++++++++++-------- tests/ipc_sem.test | 19 ++++--------------- 2 files changed, 20 insertions(+), 23 deletions(-)
diff --git a/tests/ipc_sem.c b/tests/ipc_sem.c index eddddd4..9373482 100644 --- a/tests/ipc_sem.c +++ b/tests/ipc_sem.c @@ -2,10 +2,19 @@ #include <errno.h> #include <sys/sem.h> +union semun { + int val; /* Value for SETVAL */ + struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */ + unsigned short *array; /* Array for GETALL, SETALL */ + struct seminfo *__buf; /* Buffer for IPC_INFO + (Linux-specific) */ +}; + int main(void) { int rc, id; + union semun un; struct semid_ds ds; struct seminfo info; @@ -14,16 +23,19 @@ main(void) return 77; printf("semget\\(IPC_PRIVATE, 1, 0600\\) += %d\n", id); - if (semctl(id, 0, IPC_STAT, &ds)) + un.buf = &ds; + if (semctl(id, 0, IPC_STAT, un)) goto fail; printf("semctl\\(%d, 0, IPC_STAT, %p\\) += 0\n", id, &ds); - int max = semctl(0, 0, SEM_INFO, &info); + un.__buf = &info; + int max = semctl(0, 0, SEM_INFO, un); if (max < 0) goto fail; printf("semctl\\(0, 0, SEM_INFO, %p\\) += %d\n", &info, max); - rc = semctl(id, 0, SEM_STAT, &ds); + un.buf = &ds; + rc = semctl(id, 0, SEM_STAT, un); if (rc != id) { /* * In linux < v2.6.24-rc1 the first argument must be @@ -44,10 +56,6 @@ done: return rc; fail: - /* - * If the kernel failed, SKIP the test. We want to ignore - * such failures as they're out of scope for this project. - */ - rc = errno == EFAULT ? 77 : 1; + rc = 1; goto done; } diff --git a/tests/ipc_sem.test b/tests/ipc_sem.test index f448b66..b8fa545 100755 --- a/tests/ipc_sem.test +++ b/tests/ipc_sem.test @@ -8,23 +8,12 @@ check_prog grep OUT="$LOG.out" -./ipc_sem > "$OUT" || { - case $? in - 77) - rm -f "$OUT" +./ipc_sem > /dev/null || { + if [ $? -eq 77 ]; then framework_skip_ 'ipc semget/semctl syscalls do not behave as expected' - ;; - 99) - cat "$OUT" - rm -f "$OUT" - framework_failure_ 'broken kernel detected' - ;; - *) - cat "$OUT" - rm -f "$OUT" + else fail_ 'ipc_sem failed' - ;; - esac + fi } args='-eipc ./ipc_sem' -- 2.3.3 -- Andreas Schwab, SUSE Labs, sch...@suse.de GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7 "And now for something completely different." ------------------------------------------------------------------------------ Dive into the World of Parallel Programming The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net/ _______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel