home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / gnu / glibc-1.06 / sysdeps / generic / waitstatus.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-11-18  |  3.3 KB  |  103 lines

  1. /* Definitions of status bits for `wait' et al.
  2. Copyright (C) 1992 Free Software Foundation, Inc.
  3. This file is part of the GNU C Library.
  4.  
  5. The GNU C Library is free software; you can redistribute it and/or
  6. modify it under the terms of the GNU Library General Public License as
  7. published by the Free Software Foundation; either version 2 of the
  8. License, or (at your option) any later version.
  9.  
  10. The GNU C Library is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13. Library General Public License for more details.
  14.  
  15. You should have received a copy of the GNU Library General Public
  16. License along with the GNU C Library; see the file COPYING.LIB.  If
  17. not, write to the Free Software Foundation, Inc., 675 Mass Ave,
  18. Cambridge, MA 02139, USA.  */
  19.  
  20. /* Everything extant so far uses these same bits.  */
  21.  
  22. #ifndef    _WAITSTATUS_H
  23. #define    _WAITSTATUS_H
  24.  
  25. /* If WIFEXITED(STATUS), the low-order 8 bits of the status.  */
  26. #define    __WEXITSTATUS(status)    (((status) & 0xff00) >> 8)
  27.  
  28. /* If WIFSIGNALED(STATUS), the terminating signal.  */
  29. #define    __WTERMSIG(status)    ((status) & 0x7f)
  30.  
  31. /* If WIFSTOPPED(STATUS), the signal that stopped the child.  */
  32. #define    __WSTOPSIG(status)    __WEXITSTATUS(status)
  33.  
  34. /* Nonzero if STATUS indicates normal termination.  */
  35. #define    __WIFEXITED(status)    (__WTERMSIG(status) == 0)
  36.  
  37. /* Nonzero if STATUS indicates termination by a signal.  */
  38. #ifdef    __GNUC__
  39. #define    __WIFSIGNALED(status)                              \
  40.   (__extension__ ({ int __stat = (status);                      \
  41.             !__WIFSTOPPED(__stat) && !__WIFEXITED(__stat); }))
  42. #else    /* Not GCC.  */
  43. #define    __WIFSIGNALED(status)    (!__WIFSTOPPED(status) && !__WIFEXITED(status))
  44. #endif    /* GCC.  */
  45.  
  46. /* Nonzero if STATUS indicates the child is stopped.  */
  47. #define    __WIFSTOPPED(status)    (((status) & 0xff) == 0x7f)
  48.  
  49. /* Nonzero if STATUS indicates the child dumped core.  */
  50. #define    __WCOREDUMP(status)    ((status) & 0200)
  51.  
  52. /* Macros for constructing status values.  */
  53. #define    __W_EXITCODE(ret, sig)    ((ret) << 8 | (sig))
  54. #define    __W_STOPCODE(sig)    ((sig) << 8 | 0x7f)
  55.  
  56.  
  57. #ifdef    __USE_BSD
  58.  
  59. #include <endian.h>
  60.  
  61. union wait
  62.   {
  63.     struct
  64.       {
  65. #if    __BYTE_ORDER == __LITTLE_ENDIAN
  66.     unsigned int __w_termsig:7; /* Terminating signal.  */
  67.     unsigned int __w_coredump:1; /* Set if dumped core.  */
  68.     unsigned int __w_retcode:8; /* Return code if exited normally.  */
  69.     unsigned int:16;
  70. #endif                /* Little endian.  */
  71. #if    __BYTE_ORDER == __BIG_ENDIAN
  72.     unsigned int:16;
  73.     unsigned int __w_retcode:8;
  74.     unsigned int __w_coredump:1;
  75.     unsigned int __w_termsig:7;
  76. #endif                /* Big endian.  */
  77.       } __wait_terminated;
  78.     struct
  79.       {
  80. #if    __BYTE_ORDER == __LITTLE_ENDIAN
  81.     unsigned int __w_stopval:8; /* W_STOPPED if stopped.  */
  82.     unsigned int __w_stopsig:8; /* Stopping signal.  */
  83.     unsigned int:16;
  84. #endif                /* Little endian.  */
  85. #if    __BYTE_ORDER == __BIG_ENDIAN
  86.     unsigned int:16;
  87.     unsigned int __w_stopsig:8; /* Stopping signal.  */
  88.     unsigned int __w_stopval:8; /* W_STOPPED if stopped.  */
  89. #endif                /* Big endian.  */
  90.       } __wait_stopped;
  91.   };
  92.  
  93. #define    w_termsig    __wait_terminated.__w_termsig
  94. #define    w_coredump    __wait_terminated.__w_coredump
  95. #define    w_retcode    __wait_terminated.__w_retcode
  96. #define    w_stopsig    __wait_stopped.__w_stopsig
  97. #define    w_stopval    __wait_stopped.__w_stopval
  98.  
  99. #endif    /* Use BSD.  */
  100.  
  101.  
  102. #endif    /* waitstatus.h */
  103.