2006-10-10 Roland McGrath <roland@frob.com>

* sysdeps/mach/hurd/utimes.c: Use a union to avoid an improper cast.
	* sysdeps/mach/hurd/futimes.c: Likewise.
	* sysdeps/mach/hurd/lutimes.c: Likewise.
This commit is contained in:
Roland McGrath 2006-10-10 09:28:40 +00:00
parent 1100f84983
commit e298a3189d
3 changed files with 34 additions and 20 deletions

View File

@ -1,5 +1,5 @@
/* futimes -- change access and modification times of open file. Hurd version.
Copyright (C) 2002 Free Software Foundation, Inc.
Copyright (C) 2002, 2006 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
@ -28,20 +28,24 @@
int
__futimes (int fd, const struct timeval tvp[2])
{
struct timeval timevals[2];
union tv
{
struct timeval tv;
time_value_t tvt;
};
const union tv *u = (const union tv *) tvp;
union tv nulltv[2];
error_t err;
if (tvp == NULL)
{
/* Setting the number of microseconds to `-1' tells the
underlying filesystems to use the current time. */
timevals[1].tv_usec = timevals[0].tv_usec = (time_t)-1;
tvp = timevals;
nulltv[0].tvt.microseconds = nulltv[1].tvt.microseconds = -1;
u = nulltv;
}
err = HURD_DPORT_USE (fd, __file_utimes (port,
*(time_value_t *) &tvp[0],
*(time_value_t *) &tvp[1]));
err = HURD_DPORT_USE (fd, __file_utimes (port, u[0].tvt, u[1].tvt));
return err ? __hurd_dfail (fd, err) : 0;
}
weak_alias (__futimes, futimes)

View File

@ -1,5 +1,5 @@
/* lutimes -- change access and modification times of a symlink. Hurd version.
Copyright (C) 2002 Free Software Foundation, Inc.
Copyright (C) 2002, 2006 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
@ -28,7 +28,13 @@
int
__lutimes (const char *file, const struct timeval tvp[2])
{
struct timeval timevals[2];
union tv
{
struct timeval tv;
time_value_t tvt;
};
const union tv *u = (const union tv *) tvp;
union tv nulltv[2];
error_t err;
file_t port;
@ -36,15 +42,14 @@ __lutimes (const char *file, const struct timeval tvp[2])
{
/* Setting the number of microseconds to `-1' tells the
underlying filesystems to use the current time. */
timevals[1].tv_usec = timevals[0].tv_usec = (time_t)-1;
tvp = timevals;
nulltv[0].tvt.microseconds = nulltv[1].tvt.microseconds = -1;
u = nulltv;
}
port = __file_name_lookup (file, O_NOLINK, 0);
if (port == MACH_PORT_NULL)
return -1;
err = __file_utimes (port,
*(time_value_t *) &tvp[0], *(time_value_t *) &tvp[1]);
err = __file_utimes (port, u[0].tvt, u[1].tvt);
__mach_port_deallocate (__mach_task_self (), port);
if (err)
return __hurd_fail (err);

View File

@ -1,4 +1,5 @@
/* Copyright (C) 1991-1995, 97, 99, 2000 Free Software Foundation, Inc.
/* Copyright (C) 1991-1995,1997,1999,2000,2006
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
@ -28,7 +29,13 @@ __utimes (file, tvp)
const char *file;
const struct timeval tvp[2];
{
struct timeval timevals[2];
union tv
{
struct timeval tv;
time_value_t tvt;
};
const union tv *u = (const union tv *) tvp;
union tv nulltv[2];
error_t err;
file_t port;
@ -36,19 +43,17 @@ __utimes (file, tvp)
{
/* Setting the number of microseconds to `-1' tells the
underlying filesystems to use the current time. */
timevals[1].tv_usec = timevals[0].tv_usec = (time_t)-1;
tvp = timevals;
nulltv[0].tvt.microseconds = nulltv[1].tvt.microseconds = -1;
u = nulltv;
}
port = __file_name_lookup (file, 0, 0);
if (port == MACH_PORT_NULL)
return -1;
err = __file_utimes (port,
*(time_value_t *) &tvp[0], *(time_value_t *) &tvp[1]);
err = __file_utimes (port, u[0].tvt, u[1].tvt);
__mach_port_deallocate (__mach_task_self (), port);
if (err)
return __hurd_fail (err);
return 0;
}
weak_alias (__utimes, utimes)