aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/mach/hurd
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/mach/hurd')
-rw-r--r--sysdeps/mach/hurd/sendmsg.c25
-rw-r--r--sysdeps/mach/hurd/times.c8
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)