This is the mail archive of the cygwin-cvs@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[newlib-cygwin] Cygwin: Remove union wait


https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=6706b19a974b10fc20234fc101ab7bf5f9563705

commit 6706b19a974b10fc20234fc101ab7bf5f9563705
Author: Corinna Vinschen <corinna@vinschen.de>
Date:   Fri Aug 24 20:57:47 2018 +0200

    Cygwin: Remove union wait
    
    This patch follows glibc.  Original commit message:
    
    Author:	Florian Weimer <fweimer@redhat.com>
    Date:   Thu, 14 Apr 2016 06:54:57 +0000
    
    Remove union wait [BZ #19613]
    
    The overloading approach in the W* macros was incompatible with
    integer expressions of a type different from int.  Applications
    using union wait and these macros will have to migrate to the
    POSIX-specified int status type.
    
    Signed-off-by: Corinna Vinschen <corinna@vinschen.de>

Diff:
---
 winsup/cygwin/include/cygwin/wait.h | 21 +++++------
 winsup/cygwin/include/sys/wait.h    | 74 ++-----------------------------------
 winsup/cygwin/release/2.11.0        |  4 ++
 winsup/doc/new-features.xml         |  6 +++
 4 files changed, 23 insertions(+), 82 deletions(-)

diff --git a/winsup/cygwin/include/cygwin/wait.h b/winsup/cygwin/include/cygwin/wait.h
index 8934314..7e40c8d 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. */
       <code> == 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 dc89458..97e5d99 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 44206b4..6ffe3f6 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 48a1765..e7dfca5 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.
 </para></listitem>
 
+<listitem><para>
+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.
+</para></listitem>
+
 </itemizedlist>
 
 </sect2>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]