From 1d02865b2db8a39c8a67145826456a37e8831d5d Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Thu, 29 Dec 2005 10:51:20 +0000 Subject: * sysdeps/mach/hurd/errno.c: New file. * sysdeps/mach/hurd/ioctl.c (__ioctl): Use a union to avoid a cast. --- ChangeLog | 4 ++++ sysdeps/mach/hurd/errno.c | 1 + sysdeps/mach/hurd/ioctl.c | 13 +++++++++++-- 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 sysdeps/mach/hurd/errno.c diff --git a/ChangeLog b/ChangeLog index afe77cc648..fc72086b2d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2005-12-29 Roland McGrath + * 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 index 0000000000..a29091b5e2 --- /dev/null +++ b/sysdeps/mach/hurd/errno.c @@ -0,0 +1 @@ +/* No definition of `errno' variable on the Hurd. */ diff --git a/sysdeps/mach/hurd/ioctl.c b/sysdeps/mach/hurd/ioctl.c index 6a540241a4..bcc78bc84e 100644 --- a/sysdeps/mach/hurd/ioctl.c +++ b/sysdeps/mach/hurd/ioctl.c @@ -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; -- cgit 1.4.1