[__USE_SVID] (key_t): New type.
[kopensolaris-gnu/glibc.git] / posix / sys / wait.h
index af13482..b7800d7 100644 (file)
@@ -46,19 +46,27 @@ __BEGIN_DECLS
 #define        __WAIT_INT(status)      (*(int *) &(status))
 #endif
 
-/* This is the type of the argument to `wait'.  With GCC 2.4 and later, the
-   funky union causes redeclarations with either `int *' or `union wait *'
-   to be allowed without complaint.  (__GNUC_MINOR__ is in fact only
-   defined in later versions, after 2.5.0; and versions prior to 2.6 have a
-   bug that produces bad code on some machines when using the union.)
-   __WAIT_STATUS_DEFN is the type used in the actual function definitions. */
+/* This is the type of the argument to `wait'.
+
+   NOTE: Since this functionality is volatile, I'm disabling the use of it for
+   now.
+
+With GCC 2.6.1 and later, the funky union causes redeclarations with either
+   `int *' or `union wait *' to be allowed without complaint.
+   __WAIT_STATUS_DEFN is the type used in the actual function
+   definitions. */
 
 #if    (!defined (__GNUC__) || __GNUC__ < 2 || \
-        (__GNUC__ == 2 && __GNUC_MINOR__ < 6))
+        /*(__GNUC__ == 2 && __GNUC_MINOR__ < 6)*/ 1)
 #define        __WAIT_STATUS           __ptr_t
 #define        __WAIT_STATUS_DEFN      __ptr_t
 #else
-#define        __WAIT_STATUS           union { union wait *__uptr; int *__iptr; }
+/* This works in GCC 2.6.1 and later.  */
+typedef union
+  {
+    union wait *__uptr;
+    int *__iptr;
+  } __WAIT_STATUS __attribute__ ((transparent_union));
 #define        __WAIT_STATUS_DEFN      int *
 #endif