Skip to content

Commit

Permalink
2006-10-10 Roland McGrath <roland@frob.com>
Browse files Browse the repository at this point in the history
	* 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.
  • Loading branch information
Roland McGrath committed Oct 10, 2006
1 parent 1100f84 commit e298a31
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 20 deletions.
18 changes: 11 additions & 7 deletions sysdeps/mach/hurd/futimes.c
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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)
17 changes: 11 additions & 6 deletions sysdeps/mach/hurd/lutimes.c
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -28,23 +28,28 @@
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;

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;
}

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);
Expand Down
19 changes: 12 additions & 7 deletions sysdeps/mach/hurd/utimes.c
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -28,27 +29,31 @@ __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;

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;
}

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)

0 comments on commit e298a31

Please sign in to comment.