Mercurial > hg > octave-lojdl > gnulib-hg
changeset 17247:fe6ac936b969
sigprocmask-tests: skip test if pid is unexpectedly large
At least mingw64 has 8-byte pid_t but only 4-byte long. Silent
truncation to int in printing a pid value with %d risks killing the
wrong process. But rather than try to futz with determining
the maximum pid_t, it is simpler to just cap things by realizing
that this test is already skipped on mingw64, so adding a sanity
check bounds comparison (and hard-coding the result rather than
dragging in headers for INT_MAX) is just as effective at avoiding
theoretical problems with no real loss in test coverage.
* tests/test-sigprocmask.c (main): Add range check.
Signed-off-by: Eric Blake <eblake@redhat.com>
author | Eric Blake <eblake@redhat.com> |
---|---|
date | Mon, 31 Dec 2012 16:51:29 -0700 |
parents | 7d2aa4fc02ab |
children | 83765d325866 |
files | ChangeLog tests/test-sigprocmask.c |
diffstat | 2 files changed, 11 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-12-31 Eric Blake <eblake@redhat.com> + sigprocmask-tests: skip test if pid is unexpectedly large + * tests/test-sigprocmask.c (main): Add range check. + git-version-gen: avoid test -z portability glitch * build-aux/git-version-gen: Prefer portable test spelling, since git-version-gen is run on more than just developer machines.
--- a/tests/test-sigprocmask.c +++ b/tests/test-sigprocmask.c @@ -44,9 +44,15 @@ main (int argc, char *argv[]) { sigset_t set; - int pid = getpid (); + pid_t pid = getpid (); char command[80]; + if (sizeof (int) < sizeof pid && 0x7fffffff < pid) + { + fputs ("Skipping test: pid too large\n", stderr); + return 77; + } + signal (SIGINT, sigint_handler); sigemptyset (&set); @@ -60,7 +66,7 @@ ASSERT (sigprocmask (SIG_BLOCK, &set, NULL) == 0); /* Request a SIGINT signal from outside. */ - sprintf (command, "sh -c 'sleep 1; kill -%d %d' &", SIGINT, pid); + sprintf (command, "sh -c 'sleep 1; kill -%d %d' &", SIGINT, (int) pid); ASSERT (system (command) == 0); /* Wait. */