diff options
author | Eric Blake <eblake@redhat.com> | 2010-09-17 15:43:00 -0600 |
---|---|---|
committer | Eric Blake <eblake@redhat.com> | 2010-09-17 15:43:00 -0600 |
commit | e196f905d7673c9c9bfc951e1f3f6204cb7cc1eb (patch) | |
tree | ee6c6327409e91440bbb494c831a31505385e043 /tests | |
parent | 6bb1327e10941a5c1cbc30b0cf05a76dc0b929a5 (diff) | |
download | gnulib-e196f905d7673c9c9bfc951e1f3f6204cb7cc1eb.tar.gz |
tests: fix unportable assumption on sys/wait.h
* tests/test-sys_wait.c (main): Relax test.
* tests/test-stdlib.c (main): Likewise.
Signed-off-by: Eric Blake <eblake@redhat.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test-stdlib.c | 18 | ||||
-rw-r--r-- | tests/test-sys_wait.c | 16 |
2 files changed, 29 insertions, 5 deletions
diff --git a/tests/test-stdlib.c b/tests/test-stdlib.c index e613b27bba..5a8f045f55 100644 --- a/tests/test-stdlib.c +++ b/tests/test-stdlib.c @@ -45,9 +45,21 @@ main (void) Note that some of these macros are only portable when operating on an lvalue. */ int i; - for (i = 0; i < 0x10000; i = (i ? i << 1 : 1)) - if (!!WIFSIGNALED (i) + !!WIFEXITED (i) + !!WIFSTOPPED (i) != 1) - return 1; + for (i = 0; i < 0x8000; i = (i ? i << 1 : 1)) + { + /* POSIX requires that for all valid process statuses, that + exactly one of these three macros is true. But not all + possible 16-bit values map to valid process status. + Traditionally, 8 of the bits are for WIFEXITED, 7 of the bits + to tell between WIFSIGNALED and WIFSTOPPED, and either 0x80 + or 0x8000 to flag that core was also dumped. Since we don't + know which byte is WIFEXITED, we skip the both possible bits + that can signal core dump. */ + if (i == 0x80) + continue; + if (!!WIFSIGNALED (i) + !!WIFEXITED (i) + !!WIFSTOPPED (i) != 1) + return 1; + } i = WEXITSTATUS (i) + WSTOPSIG (i) + WTERMSIG (i); switch (i) diff --git a/tests/test-sys_wait.c b/tests/test-sys_wait.c index 917de0dc69..e9e63b6bbd 100644 --- a/tests/test-sys_wait.c +++ b/tests/test-sys_wait.c @@ -30,8 +30,20 @@ main (void) that these are safe only on lvalues. */ int i; for (i = 0; i < 0x10000; i = (i ? i << 1 : 1)) - if (!!WIFSIGNALED (i) + !!WIFEXITED (i) + !!WIFSTOPPED (i) != 1) - return 1; + { + /* POSIX requires that for all valid process statuses, that + exactly one of these three macros is true. But not all + possible 16-bit values map to valid process status. + Traditionally, 8 of the bits are for WIFEXITED, 7 of the bits + to tell between WIFSIGNALED and WIFSTOPPED, and either 0x80 + or 0x8000 to flag that core was also dumped. Since we don't + know which byte is WIFEXITED, we skip the both possible bits + that can signal core dump. */ + if (i == 0x80) + continue; + if (!!WIFSIGNALED (i) + !!WIFEXITED (i) + !!WIFSTOPPED (i) != 1) + return 1; + } i = WEXITSTATUS (i) + WSTOPSIG (i) + WTERMSIG (i); switch (i) |