diff --git a/winsup/cygwin/include/cygwin/wait.h b/winsup/cygwin/include/cygwin/wait.h index 89343143c..7e40c8d6c 100644 --- a/winsup/cygwin/include/cygwin/wait.h +++ b/winsup/cygwin/include/cygwin/wait.h @@ -17,9 +17,6 @@ details. */ #define WCONTINUED 8 #define __W_CONTINUED 0xffff -/* Will be redefined in sys/wait.h. */ -#define __wait_status_to_int(w) (w) - /* A status is 16 bits, and looks like: <1 byte info> <1 byte code> @@ -29,14 +26,14 @@ details. */ == 80, there was a core dump. */ -#define WIFEXITED(w) ((__wait_status_to_int(w) & 0xff) == 0) -#define WIFSIGNALED(w) ((__wait_status_to_int(w) & 0x7f) > 0 \ - && ((__wait_status_to_int(w) & 0x7f) < 0x7f)) -#define WIFSTOPPED(w) ((__wait_status_to_int(w) & 0xff) == 0x7f) -#define WIFCONTINUED(w) ((__wait_status_to_int(w) & 0xffff) == __W_CONTINUED) -#define WEXITSTATUS(w) ((__wait_status_to_int(w) >> 8) & 0xff) -#define WTERMSIG(w) (__wait_status_to_int(w) & 0x7f) -#define WSTOPSIG WEXITSTATUS -#define WCOREDUMP(w) (WIFSIGNALED(w) && (__wait_status_to_int(w) & 0x80)) +#define WIFEXITED(_w) (((_w) & 0xff) == 0) +#define WIFSIGNALED(_w) (((_w) & 0x7f) > 0 \ + && (((_w) & 0x7f) < 0x7f)) +#define WIFSTOPPED(_w) (((_w) & 0xff) == 0x7f) +#define WIFCONTINUED(_w) (((_w) & 0xffff) == __W_CONTINUED) +#define WEXITSTATUS(_w) (((_w) >> 8) & 0xff) +#define WTERMSIG(_w) ((_w) & 0x7f) +#define WSTOPSIG WEXITSTATUS +#define WCOREDUMP(_w) (WIFSIGNALED(_w) && ((_w) & 0x80)) #endif /* _CYGWIN_WAIT_H */ diff --git a/winsup/cygwin/include/sys/wait.h b/winsup/cygwin/include/sys/wait.h index dc8945843..97e5d9998 100644 --- a/winsup/cygwin/include/sys/wait.h +++ b/winsup/cygwin/include/sys/wait.h @@ -17,79 +17,13 @@ details. */ extern "C" { #endif -#ifdef __INSIDE_CYGWIN__ - -typedef int *__wait_status_ptr_t; - -#elif defined(__cplusplus) - -/* Attribute __transparent_union__ is only supported for C. */ -typedef void *__wait_status_ptr_t; - -#else /* !__INSIDE_CYGWIN__ && !__cplusplus */ - -/* Allow `int' and `union wait' for the status. */ -typedef union - { - int *__int_ptr; - union wait *__union_wait_ptr; - } __wait_status_ptr_t __attribute__ ((__transparent_union__)); - -#endif /* __INSIDE_CYGWIN__ */ - -pid_t wait (__wait_status_ptr_t __status); -pid_t waitpid (pid_t __pid, __wait_status_ptr_t __status, int __options); -pid_t wait3 (__wait_status_ptr_t __status, int __options, struct rusage *__rusage); -pid_t wait4 (pid_t __pid, __wait_status_ptr_t __status, int __options, struct rusage *__rusage); - -#ifdef _COMPILING_NEWLIB -pid_t _wait (__wait_status_ptr_t __status); -#endif - -union wait - { - int w_status; - struct - { - unsigned int __w_termsig:7; /* Terminating signal. */ - unsigned int __w_coredump:1; /* Set if dumped core. */ - unsigned int __w_retcode:8; /* Return code if exited normally. */ - unsigned int:16; - } __wait_terminated; - struct - { - unsigned int __w_stopval:8; /* W_STOPPED if stopped. */ - unsigned int __w_stopsig:8; /* Stopping signal. */ - unsigned int:16; - } __wait_stopped; - }; -#define w_termsig __wait_terminated.__w_termsig -#define w_coredump __wait_terminated.__w_coredump -#define w_retcode __wait_terminated.__w_retcode -#define w_stopsig __wait_stopped.__w_stopsig -#define w_stopval __wait_stopped.__w_stopval +pid_t wait (int *__status); +pid_t waitpid (pid_t __pid, int *__status, int __options); +pid_t wait3 (int *__status, int __options, struct rusage *__rusage); +pid_t wait4 (pid_t __pid, int *__status, int __options, struct rusage *__rusage); #ifdef __cplusplus } #endif -/* Used in cygwin/wait.h, redefine to accept `int' and `union wait'. */ -#undef __wait_status_to_int - -#ifdef __cplusplus - -extern "C++" { -inline int __wait_status_to_int (int __status) - { return __status; } -inline int __wait_status_to_int (const union wait & __status) - { return __status.w_status; } -} - -#else /* !__cplusplus */ - -#define __wait_status_to_int(__status) (__extension__ \ - (((union { __typeof(__status) __sin; int __sout; }) { .__sin = (__status) }).__sout)) - -#endif /* __cplusplus */ - #endif /* _SYS_WAIT_H */ diff --git a/winsup/cygwin/release/2.11.0 b/winsup/cygwin/release/2.11.0 index 44206b4d2..6ffe3f6a6 100644 --- a/winsup/cygwin/release/2.11.0 +++ b/winsup/cygwin/release/2.11.0 @@ -22,6 +22,10 @@ What changed: - Support Unicode 10. +- Following glibc, `union wait' has now been removed. Applications + using union wait and these macros will have to migrate to the + POSIX-specified int status type. + Bug Fixes --------- diff --git a/winsup/doc/new-features.xml b/winsup/doc/new-features.xml index 48a17654c..e7dfca5ba 100644 --- a/winsup/doc/new-features.xml +++ b/winsup/doc/new-features.xml @@ -38,6 +38,12 @@ Rename the --file option of setfacl(1) to --set-file, as on Linux. Support Unicode 10. + +Following glibc, `union wait' has now been removed. Applications +using union wait and these macros will have to migrate to the +POSIX-specified int status type. + +