summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2010-09-17 15:43:00 -0600
committerEric Blake <eblake@redhat.com>2010-09-17 15:43:00 -0600
commite196f905d7673c9c9bfc951e1f3f6204cb7cc1eb (patch)
treeee6c6327409e91440bbb494c831a31505385e043 /tests
parent6bb1327e10941a5c1cbc30b0cf05a76dc0b929a5 (diff)
downloadgnulib-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.c18
-rw-r--r--tests/test-sys_wait.c16
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)