* sysdeps/mach/hurd/errno.c: New file.
authorRoland McGrath <roland@gnu.org>
Thu, 29 Dec 2005 10:51:20 +0000 (10:51 +0000)
committerRoland McGrath <roland@gnu.org>
Thu, 29 Dec 2005 10:51:20 +0000 (10:51 +0000)
* sysdeps/mach/hurd/ioctl.c (__ioctl): Use a union to avoid a cast.

ChangeLog
sysdeps/mach/hurd/errno.c [new file with mode: 0644]
sysdeps/mach/hurd/ioctl.c

index afe77cc..fc72086 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2005-12-29  Roland McGrath  <roland@frob.com>
 
+       * sysdeps/mach/hurd/errno.c: New file.
+
+       * sysdeps/mach/hurd/ioctl.c (__ioctl): Use a union to avoid a cast.
+
        * sysdeps/posix/libc_fatal.c (__libc_message): Add a const, a cast.
 
        * hurd/lookup-retry.c (__hurd_file_name_lookup_retry): Fix cast.
diff --git a/sysdeps/mach/hurd/errno.c b/sysdeps/mach/hurd/errno.c
new file mode 100644 (file)
index 0000000..a29091b
--- /dev/null
@@ -0,0 +1 @@
+/* No definition of `errno' variable on the Hurd.  */
index 6a54024..bcc78bc 100644 (file)
@@ -58,7 +58,16 @@ __ioctl (int fd, unsigned long int request, ...)
   struct
   {
 #ifdef MACH_MSG_TYPE_BIT
-    mig_reply_header_t header;
+    union
+    {
+      mig_reply_header_t header;
+      struct
+      {
+       mach_msg_header_t       Head;
+       int                     RetCodeType;
+       kern_return_t           RetCode;
+      } header_typecheck;
+    };
     char data[3 * sizeof (mach_msg_type_t) +
             msg_align (_IOT_COUNT0 (type) * typesize (_IOT_TYPE0 (type))) +
             msg_align (_IOT_COUNT1 (type) * typesize (_IOT_TYPE1 (type))) +
@@ -192,7 +201,7 @@ __ioctl (int fd, unsigned long int request, ...)
        return MIG_TYPE_ERROR;
 
 #ifdef MACH_MSG_TYPE_BIT
-      if (*(int *) &msg.header.RetCodeType !=
+      if (msg.header_typecheck.RetCodeType !=
          ((union { mach_msg_type_t t; int i; })
           { t: io2mach_type (1, _IOTS (msg.header.RetCode)) }).i)
        return MIG_TYPE_ERROR;