diff options
Diffstat (limited to 'tests/test-sys_wait.h')
| -rw-r--r-- | tests/test-sys_wait.h | 53 | 
1 files changed, 53 insertions, 0 deletions
| diff --git a/tests/test-sys_wait.h b/tests/test-sys_wait.h new file mode 100644 index 00000000..e4a79b54 --- /dev/null +++ b/tests/test-sys_wait.h @@ -0,0 +1,53 @@ +/* Test of macros shared between <sys/wait.h> and <stdlib.h>. +   Copyright (C) 2010-2015 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation; either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ + +/* Written by Eric Blake <ebb9@byu.net>, 2010.  */ + +static int +test_sys_wait_macros (void) +{ +  /* Check subset of <sys/wait.h> macros that must be visible here. +     Note that some of these macros are only portable when operating +     on an lvalue.  */ +  int i; +  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) +    { +#if 0 +  /* Gnulib doesn't guarantee these, yet.  */ +    case WNOHANG: +    case WUNTRACED: +#endif +      break; +    } +  return 0; +} | 
