diff options
Diffstat (limited to 'sysdeps/mach/hurd')
-rw-r--r-- | sysdeps/mach/hurd/sendmsg.c | 25 | ||||
-rw-r--r-- | sysdeps/mach/hurd/times.c | 8 |
2 files changed, 18 insertions, 15 deletions
diff --git a/sysdeps/mach/hurd/sendmsg.c b/sysdeps/mach/hurd/sendmsg.c index 71975c58c5..5fdfd734ec 100644 --- a/sysdeps/mach/hurd/sendmsg.c +++ b/sysdeps/mach/hurd/sendmsg.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001, 2002 Free Software Foundation, Inc. +/* Copyright (C) 2001,2002,2004 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -35,7 +35,11 @@ __libc_sendmsg (int fd, const struct msghdr *message, int flags) struct sockaddr_un *addr = message->msg_name; socklen_t addr_len = message->msg_namelen; addr_port_t aport = MACH_PORT_NULL; - char *data = NULL; + union + { + char *ptr; + vm_address_t addr; + } data = { .ptr = NULL }; char data_buf[2048]; mach_msg_type_number_t len; mach_msg_type_number_t amount; @@ -51,15 +55,15 @@ __libc_sendmsg (int fd, const struct msghdr *message, int flags) /* As an optimization, if we only have a single non-empty iovec, we set DATA and LEN from it. */ if (len == 0) - data = message->msg_iov[i].iov_base; + data.ptr = message->msg_iov[i].iov_base; else - data = NULL; + data.ptr = NULL; len += message->msg_iov[i].iov_len; } } - if (data == NULL) + if (data.ptr == NULL) { size_t to_copy; char *buf; @@ -70,8 +74,7 @@ __libc_sendmsg (int fd, const struct msghdr *message, int flags) limit of 2048 bytes is inspired by the MiG stubs. */ if (len > 2048) { - err = __vm_allocate (__mach_task_self (), - (vm_address_t *) &data, len, 1); + err = __vm_allocate (__mach_task_self (), &data.addr, len, 1); if (err) { __set_errno (err); @@ -80,11 +83,11 @@ __libc_sendmsg (int fd, const struct msghdr *message, int flags) dealloc = 1; } else - data = data_buf; + data.ptr = data_buf; /* Copy the data into DATA. */ to_copy = len; - buf = data; + buf = data.ptr; for (i = 0; i < len; i++) { #define min(a, b) ((a) > (b) ? (b) : (a)) @@ -131,7 +134,7 @@ __libc_sendmsg (int fd, const struct msghdr *message, int flags) { /* Send the data. */ err = __socket_send (port, aport, - flags, data, len, + flags, data.ptr, len, NULL, MACH_MSG_TYPE_COPY_SEND, 0, message->msg_control, @@ -144,7 +147,7 @@ __libc_sendmsg (int fd, const struct msghdr *message, int flags) })); if (dealloc) - __vm_deallocate (__mach_task_self (), (vm_address_t) data, len); + __vm_deallocate (__mach_task_self (), data.addr, len); return err ? __hurd_dfail (fd, err) : amount; } diff --git a/sysdeps/mach/hurd/times.c b/sysdeps/mach/hurd/times.c index 542f23dc76..deab40e5ef 100644 --- a/sysdeps/mach/hurd/times.c +++ b/sysdeps/mach/hurd/times.c @@ -1,5 +1,5 @@ /* Return CPU and real time used by process and its children. Hurd version. - Copyright (C) 2001,2002,2003 Free Software Foundation, Inc. + Copyright (C) 2001,2002,2003,2004 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -43,7 +43,7 @@ __times (struct tms *tms) struct task_basic_info bi; struct task_thread_times_info tti; mach_msg_type_number_t count; - time_value_t now; + union { time_value_t tvt; struct timeval tv; } now; error_t err; count = TASK_BASIC_INFO_COUNT; @@ -66,10 +66,10 @@ __times (struct tms *tms) /* XXX This can't be implemented until getrusage(RUSAGE_CHILDREN) can be. */ tms->tms_cutime = tms->tms_cstime = 0; - if (__gettimeofday ((struct timeval *) &now, NULL) < 0) + if (__gettimeofday (&now.tv, NULL) < 0) return -1; - return (clock_from_time_value (&now) + return (clock_from_time_value (&now.tvt) - clock_from_time_value (&bi.creation_time)); } weak_alias (__times, times) |