summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Banck <mbanck@debian.org>2007-05-05 15:14:44 +0000
committerMichael Banck <mbanck@debian.org>2007-05-05 15:14:44 +0000
commit46369dcf4a8b1a9454640d7886709d3a02f4e98e (patch)
tree45f73c622737a2fc9190d73ca74ff79b5b331df4
parent6c75ec974ecc4f05ab60a3eb08a059620a97af7f (diff)
* debian/patches/glibc_stat_updates.patch: New patch, updates for
stat changes in glibc, by Thomas Schwinge.
-rw-r--r--debian/changelog2
-rw-r--r--debian/patches/glibc_stat_updates.patch615
2 files changed, 617 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog
index 381fa9df..7c7aecae 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -6,6 +6,8 @@ hurd (20060825-2+SVN) unreleased; urgency=low
* debian/control (Build-Depends): Added libc0.3 (>= 2.5-5).
* debian/copyright: Clarify that the package is maintained by the
Debian GNU Hurd maintainers and no longer by upstream.
+ * debian/patches/glibc_stat_updates.patch: New patch, updates for
+ stat changes in glibc, by Thomas Schwinge.
-- Michael Banck <mbanck@debian.org> Sat, 7 Oct 2006 14:31:57 +0200
diff --git a/debian/patches/glibc_stat_updates.patch b/debian/patches/glibc_stat_updates.patch
new file mode 100644
index 00000000..419220bb
--- /dev/null
+++ b/debian/patches/glibc_stat_updates.patch
@@ -0,0 +1,615 @@
+Index: console/console.c
+===================================================================
+RCS file: /cvsroot/hurd/hurd/console/console.c,v
+retrieving revision 1.23
+diff -u -p -r1.23 console.c
+--- console/console.c 23 Jan 2006 22:19:13 -0000 1.23
++++ console/console.c 30 Mar 2007 15:52:56 -0000
+@@ -501,16 +501,24 @@ netfs_attempt_utimes (struct iouser *cre
+ {
+ if (mtime)
+ {
++#if __USE_MISC
++ node->nn_stat.st_mtim = *mtime;
++#else
+ node->nn_stat.st_mtime = mtime->tv_sec;
+ node->nn_stat.st_mtime_usec = mtime->tv_nsec / 1000;
++#endif
+ }
+ else
+ flags |= TOUCH_MTIME;
+
+ if (atime)
+ {
++#if __USE_MISC
++ node->nn_stat.st_atim = *atime;
++#else
+ node->nn_stat.st_atime = atime->tv_sec;
+ node->nn_stat.st_atime_usec = atime->tv_nsec / 1000;
++#endif
+ }
+ else
+ flags |= TOUCH_ATIME;
+Index: console-client/trans.c
+===================================================================
+RCS file: /cvsroot/hurd/hurd/console-client/trans.c,v
+retrieving revision 1.2
+diff -u -p -r1.2 trans.c
+--- console-client/trans.c 11 Jul 2005 13:59:24 -0000 1.2
++++ console-client/trans.c 30 Mar 2007 15:52:56 -0000
+@@ -174,16 +174,24 @@ netfs_attempt_utimes (struct iouser *cre
+ {
+ if (mtime)
+ {
++#if __USE_MISC
++ np->nn_stat.st_mtim = *mtime;
++#else
+ np->nn_stat.st_mtime = mtime->tv_sec;
+ np->nn_stat.st_mtime_usec = mtime->tv_nsec / 1000;
++#endif
+ }
+ else
+ flags |= TOUCH_MTIME;
+
+ if (atime)
+ {
++#if __USE_MISC
++ np->nn_stat.st_atim = *atime;
++#else
+ np->nn_stat.st_atime = atime->tv_sec;
+ np->nn_stat.st_atime_usec = atime->tv_nsec / 1000;
++#endif
+ }
+ else
+ flags |= TOUCH_ATIME;
+Index: fatfs/inode.c
+===================================================================
+RCS file: /cvsroot/hurd/hurd/fatfs/inode.c,v
+retrieving revision 1.6
+diff -u -p -r1.6 inode.c
+--- fatfs/inode.c 30 Mar 2007 14:15:49 -0000 1.6
++++ fatfs/inode.c 30 Mar 2007 15:52:56 -0000
+@@ -385,9 +385,13 @@ read_node (struct node *np, vm_address_t
+ {
+ struct timespec ts;
+ fat_to_epoch (dr->write_date, dr->write_time, &ts);
++#ifdef __USE_MISC
++ st->st_ctim = st->st_mtim = st->st_atim = ts;
++#else
+ st->st_ctime = st->st_mtime = st->st_atime = ts.tv_sec;
+ st->st_ctime_usec = st->st_mtime_usec = st->st_atime_usec
+ = ts.tv_nsec / 1000;
++#endif
+ }
+
+ st->st_blksize = bytes_per_sector;
+Index: ftpfs/netfs.c
+===================================================================
+RCS file: /cvsroot/hurd/hurd/ftpfs/netfs.c,v
+retrieving revision 1.8
+diff -u -p -r1.8 netfs.c
+--- ftpfs/netfs.c 29 Dec 2001 22:11:50 -0000 1.8
++++ ftpfs/netfs.c 30 Mar 2007 15:52:56 -0000
+@@ -76,16 +76,24 @@ netfs_attempt_utimes (struct iouser *cre
+ {
+ if (atime)
+ {
++#if __USE_MISC
++ node->nn_stat.st_atim = *atime;
++#else
+ node->nn_stat.st_atime = atime->tv_sec;
+ node->nn_stat.st_atime_usec = atime->tv_nsec / 1000;
++#endif
+ }
+ else
+ flags |= TOUCH_ATIME;
+
+ if (mtime)
+ {
++#if __USE_MISC
++ node->nn_stat.st_mtim = *mtime;
++#else
+ node->nn_stat.st_mtime = mtime->tv_sec;
+ node->nn_stat.st_mtime_usec = mtime->tv_nsec / 1000;
++#endif
+ }
+ else
+ flags |= TOUCH_MTIME;
+Index: hostmux/node.c
+===================================================================
+RCS file: /cvsroot/hurd/hurd/hostmux/node.c,v
+retrieving revision 1.3
+diff -u -p -r1.3 node.c
+--- hostmux/node.c 31 Jan 1999 23:48:47 -0000 1.3
++++ hostmux/node.c 30 Mar 2007 15:52:56 -0000
+@@ -78,16 +78,24 @@ netfs_attempt_utimes (struct iouser *cre
+ {
+ if (mtime)
+ {
++#if __USE_MISC
++ node->nn_stat.st_mtim = *mtime;
++#else
+ node->nn_stat.st_mtime = mtime->tv_sec;
+ node->nn_stat.st_mtime_usec = mtime->tv_nsec / 1000;
++#endif
+ }
+ else
+ flags |= TOUCH_MTIME;
+
+ if (atime)
+ {
++#if __USE_MISC
++ node->nn_stat.st_atim = *atime;
++#else
+ node->nn_stat.st_atime = atime->tv_sec;
+ node->nn_stat.st_atime_usec = atime->tv_nsec / 1000;
++#endif
+ }
+ else
+ flags |= TOUCH_ATIME;
+Index: isofs/inode.c
+===================================================================
+RCS file: /cvsroot/hurd/hurd/isofs/inode.c,v
+retrieving revision 1.17
+diff -u -p -r1.17 inode.c
+--- isofs/inode.c 25 Mar 2007 20:29:33 -0000 1.17
++++ isofs/inode.c 30 Mar 2007 15:53:01 -0000
+@@ -431,9 +431,13 @@ read_disknode (struct node *np, struct d
+ {
+ struct timespec ts;
+ isodate_915 (dr->date, &ts);
++#ifdef __USE_MISC
++ st->st_ctim = st->st_mtim = st->st_atim = ts;
++#else
+ st->st_ctime = st->st_mtime = st->st_atime = ts.tv_sec;
+ st->st_ctime_usec = st->st_mtime_usec = st->st_atime_usec
+ = ts.tv_nsec / 1000;
++#endif
+ }
+
+ /* Override what we have better info for */
+@@ -441,20 +445,32 @@ read_disknode (struct node *np, struct d
+ {
+ if (rl->tfflags & TF_CREATION)
+ {
++#ifdef __USE_MISC
++ st->st_ctim = rl->ctime;
++#else
+ st->st_ctime = rl->ctime.tv_sec;
+ st->st_ctime_usec = rl->ctime.tv_nsec / 1000;
++#endif
+ }
+
+ if (rl->tfflags & TF_ACCESS)
+ {
++#ifdef __USE_MISC
++ st->st_atim = rl->atime;
++#else
+ st->st_atime = rl->atime.tv_sec;
+ st->st_atime_usec = rl->atime.tv_nsec / 1000;
++#endif
+ }
+
+ if (rl->tfflags & TF_MODIFY)
+ {
++#ifdef __USE_MISC
++ st->st_mtim = rl->mtime;
++#else
+ st->st_mtime = rl->mtime.tv_sec;
+ st->st_mtime_usec = rl->mtime.tv_nsec / 1000;
++#endif
+ }
+ }
+
+Index: libdiskfs/node-times.c
+===================================================================
+RCS file: /cvsroot/hurd/hurd/libdiskfs/node-times.c,v
+retrieving revision 1.10
+diff -u -p -r1.10 node-times.c
+--- libdiskfs/node-times.c 3 Dec 2000 04:40:31 -0000 1.10
++++ libdiskfs/node-times.c 30 Mar 2007 15:53:01 -0000
+@@ -41,9 +41,9 @@ diskfs_set_node_times (struct node *np)
+ the update will happen at the next call. */
+ if (np->dn_set_mtime)
+ {
+-#ifdef notyet
+- np->dn_stat.st_mtimespec.ts_sec = t.tv_sec;
+- np->dn_stat.st_mtimespec.ts_nsec = t.tv_usec * 1000;
++#ifdef __USE_MISC
++ np->dn_stat.st_mtim.tv_sec = t.tv_sec;
++ np->dn_stat.st_mtim.tv_nsec = t.tv_usec * 1000;
+ #else
+ np->dn_stat.st_mtime = t.tv_sec;
+ np->dn_stat.st_mtime_usec = t.tv_usec;
+@@ -53,9 +53,9 @@ diskfs_set_node_times (struct node *np)
+ }
+ if (np->dn_set_atime)
+ {
+-#ifdef notyet
+- np->dn_stat.st_atimespec.ts_sec = t.tv_sec;
+- np->dn_stat.st_atimespec.ts_nsec = t.tv_usec * 1000;
++#ifdef __USE_MISC
++ np->dn_stat.st_atim.tv_sec = t.tv_sec;
++ np->dn_stat.st_atim.tv_nsec = t.tv_usec * 1000;
+ #else
+ np->dn_stat.st_atime = t.tv_sec;
+ np->dn_stat.st_atime_usec = t.tv_usec;
+@@ -65,9 +65,9 @@ diskfs_set_node_times (struct node *np)
+ }
+ if (np->dn_set_ctime)
+ {
+-#ifdef notyet
+- np->dn_stat.st_ctimespec.ts_sec = t.tv_sec;
+- np->dn_stat.st_ctimespec.ts_nsec = t.tv_usec * 1000;
++#ifdef __USE_MISC
++ np->dn_stat.st_ctim.tv_sec = t.tv_sec;
++ np->dn_stat.st_ctim.tv_nsec = t.tv_usec * 1000;
+ #else
+ np->dn_stat.st_ctime = t.tv_sec;
+ np->dn_stat.st_ctime_usec = t.tv_usec;
+Index: libfshelp/touch.c
+===================================================================
+RCS file: /cvsroot/hurd/hurd/libfshelp/touch.c,v
+retrieving revision 1.1
+diff -u -p -r1.1 touch.c
+--- libfshelp/touch.c 1 Jul 1999 21:04:27 -0000 1.1
++++ libfshelp/touch.c 30 Mar 2007 15:53:01 -0000
+@@ -32,17 +32,32 @@ fshelp_touch (struct stat *st, unsigned
+
+ if (what & TOUCH_ATIME)
+ {
++#ifdef __USE_MISC
++ st->st_atim.tv_sec = tv.tv_sec;
++ st->st_atim.tv_nsec = tv.tv_usec * 1000;
++#else
+ st->st_atime = tv.tv_sec;
+ st->st_atime_usec = tv.tv_usec;
++#endif
+ }
+ if (what & TOUCH_CTIME)
+ {
++#ifdef __USE_MISC
++ st->st_ctim.tv_sec = tv.tv_sec;
++ st->st_ctim.tv_nsec = tv.tv_usec * 1000;
++#else
+ st->st_ctime = tv.tv_sec;
+ st->st_ctime_usec = tv.tv_usec;
++#endif
+ }
+ if (what & TOUCH_MTIME)
+ {
++#ifdef __USE_MISC
++ st->st_mtim.tv_sec = tv.tv_sec;
++ st->st_mtim.tv_nsec = tv.tv_usec * 1000;
++#else
+ st->st_mtime = tv.tv_sec;
+ st->st_mtime_usec = tv.tv_usec;
++#endif
+ }
+ }
+Index: libtrivfs/times.c
+===================================================================
+RCS file: /cvsroot/hurd/hurd/libtrivfs/times.c,v
+retrieving revision 1.3
+diff -u -p -r1.3 times.c
+--- libtrivfs/times.c 31 Jan 1999 23:50:16 -0000 1.3
++++ libtrivfs/times.c 30 Mar 2007 15:53:01 -0000
+@@ -25,8 +25,13 @@ trivfs_set_atime (struct trivfs_control
+ time_value_t mtime;
+
+ io_stat (cntl->underlying, &st);
++#ifdef __USE_MISC
++ mtime.seconds = st.st_mtim.tv_sec;
++ mtime.microseconds = st.st_mtim.tv_nsec / 1000;
++#else
+ mtime.seconds = st.st_mtime;
+ mtime.microseconds = st.st_mtime_usec;
++#endif
+ atime.microseconds = -1;
+ file_utimes (cntl->underlying, atime, mtime);
+ return 0;
+@@ -40,8 +45,13 @@ trivfs_set_mtime (struct trivfs_control
+ time_value_t mtime;
+
+ io_stat (cntl->underlying, &st);
++#ifdef __USE_MISC
++ atime.seconds = st.st_atim.tv_sec;
++ atime.microseconds = st.st_atim.tv_nsec / 1000;
++#else
+ atime.seconds = st.st_atime;
+ atime.microseconds = st.st_atime_usec;
++#endif
+ mtime.microseconds = -1;
+ file_utimes (cntl->underlying, atime, mtime);
+ return 0;
+Index: nfs/nfs.c
+===================================================================
+RCS file: /cvsroot/hurd/hurd/nfs/nfs.c,v
+retrieving revision 1.27
+diff -u -p -r1.27 nfs.c
+--- nfs/nfs.c 29 Sep 2002 15:11:59 -0000 1.27
++++ nfs/nfs.c 30 Mar 2007 15:53:01 -0000
+@@ -335,10 +335,17 @@ xdr_encode_sattr_stat (int *p,
+ *(p++) = htonl (st->st_uid);
+ *(p++) = htonl (st->st_gid);
+ *(p++) = htonl (st->st_size);
++#if __USE_MISC
++ *(p++) = htonl (st->st_atim.tv_sec);
++ *(p++) = htonl (st->st_atim.tv_nsec / 1000);
++ *(p++) = htonl (st->st_mtim.tv_sec);
++ *(p++) = htonl (st->st_mtim.tv_nsec / 1000);
++#else
+ *(p++) = htonl (st->st_atime);
+ *(p++) = htonl (st->st_atime_usec);
+ *(p++) = htonl (st->st_mtime);
+ *(p++) = htonl (st->st_mtime_usec);
++#endif
+ }
+ else
+ {
+@@ -351,11 +358,21 @@ xdr_encode_sattr_stat (int *p,
+ *(p++) = htonl (1); /* set size */
+ p = xdr_encode_64bit (p, st->st_size);
+ *(p++) = htonl (SET_TO_CLIENT_TIME); /* set atime */
++#if __USE_MISC
++ *(p++) = htonl (st->st_atim.tv_sec);
++ *(p++) = htonl (st->st_atim.tv_nsec);
++#else
+ *(p++) = htonl (st->st_atime);
+ *(p++) = htonl (st->st_atime_usec * 1000);
++#endif
+ *(p++) = htonl (SET_TO_CLIENT_TIME); /* set mtime */
++#if __USE_MISC
++ *(p++) = htonl (st->st_mtim.tv_sec);
++ *(p++) = htonl (st->st_mtim.tv_nsec);
++#else
+ *(p++) = htonl (st->st_mtime);
+ *(p++) = htonl (st->st_mtime_usec * 1000);
++#endif
+ }
+ return p;
+ }
+@@ -442,6 +459,27 @@ xdr_decode_fattr (int *p, struct stat *s
+ p++;
+ st->st_ino = ntohl (*p);
+ p++;
++#if __USE_MISC
++ st->st_atim.tv_sec = ntohl (*p);
++ p++;
++ st->st_atim.tv_nsec = ntohl (*p);
++ p++;
++ st->st_mtim.tv_sec = ntohl (*p);
++ p++;
++ st->st_mtim.tv_nsec = ntohl (*p);
++ p++;
++ st->st_ctim.tv_sec = ntohl (*p);
++ p++;
++ st->st_ctim.tv_nsec = ntohl (*p);
++ p++;
++
++ if (protocol_version < 3)
++ {
++ st->st_atim.tv_nsec *= 1000;
++ st->st_mtim.tv_nsec *= 1000;
++ st->st_ctim.tv_nsec *= 1000;
++ }
++#else /* __USE_MISC */
+ st->st_atime = ntohl (*p);
+ p++;
+ st->st_atime_usec = ntohl (*p);
+@@ -461,6 +499,7 @@ xdr_decode_fattr (int *p, struct stat *s
+ st->st_mtime_usec /= 1000;
+ st->st_ctime_usec /= 1000;
+ }
++#endif /* __USE_MISC */
+
+ return p;
+
+Index: nfsd/ops.c
+===================================================================
+RCS file: /cvsroot/hurd/hurd/nfsd/ops.c,v
+retrieving revision 1.8
+diff -u -p -r1.8 ops.c
+--- nfsd/ops.c 29 Sep 2002 15:12:48 -0000 1.8
++++ nfsd/ops.c 30 Mar 2007 15:53:01 -0000
+@@ -104,18 +104,41 @@ complete_setattr (mach_port_t port,
+ mtime.microseconds = 0;
+
+ if (atime.seconds == -1)
++#if __USE_MISC
++ atime.seconds = st.st_atim.tv_sec;
++#else
+ atime.seconds = st.st_atime;
++#endif
+ if (atime.microseconds == -1)
++#if __USE_MISC
++ atime.microseconds = st.st_atim.tv_nsec / 1000;
++#else
+ atime.microseconds = st.st_atime_usec;
++#endif
+ if (mtime.seconds == -1)
++#if __USE_MISC
++ mtime.seconds = st.st_mtim.tv_sec;
++#else
+ mtime.seconds = st.st_mtime;
++#endif
+ if (mtime.microseconds == -1)
++#if __USE_MISC
++ mtime.microseconds = st.st_mtim.tv_nsec / 1000;
++#else
+ mtime.microseconds = st.st_mtime_usec;
++#endif
+
++#if __USE_MISC
++ if (atime.seconds != st.st_atim.tv_sec
++ || atime.microseconds != st.st_atim.tv_nsec / 1000
++ || mtime.seconds != st.st_mtim.tv_sec
++ || mtime.microseconds != st.st_mtim.tv_nsec / 1000)
++#else
+ if (atime.seconds != st.st_atime
+ || atime.microseconds != st.st_atime_usec
+ || mtime.seconds != st.st_mtime
+ || mtime.microseconds != st.st_mtime_usec)
++#endif
+ err = file_utimes (port, atime, mtime);
+
+ return err;
+Index: nfsd/xdr.c
+===================================================================
+RCS file: /cvsroot/hurd/hurd/nfsd/xdr.c,v
+retrieving revision 1.5
+diff -u -p -r1.5 xdr.c
+--- nfsd/xdr.c 29 Sep 2002 15:12:48 -0000 1.5
++++ nfsd/xdr.c 30 Mar 2007 15:53:02 -0000
+@@ -76,12 +76,21 @@ encode_fattr (int *p, struct stat *st, i
+ *(p++) = htonl (st->st_blocks);
+ *(p++) = htonl (st->st_fsid);
+ *(p++) = htonl (st->st_ino);
++#if __USE_MISC
++ *(p++) = htonl (st->st_atim.tv_sec);
++ *(p++) = htonl (st->st_atim.tv_nsec / 1000);
++ *(p++) = htonl (st->st_mtim.tv_sec);
++ *(p++) = htonl (st->st_mtim.tv_nsec / 1000);
++ *(p++) = htonl (st->st_ctim.tv_sec);
++ *(p++) = htonl (st->st_ctim.tv_nsec / 1000);
++#else
+ *(p++) = htonl (st->st_atime);
+ *(p++) = htonl (st->st_atime_usec);
+ *(p++) = htonl (st->st_mtime);
+ *(p++) = htonl (st->st_mtime_usec);
+ *(p++) = htonl (st->st_ctime);
+ *(p++) = htonl (st->st_ctime_usec);
++#endif
+ return p;
+ }
+
+Index: pflocal/io.c
+===================================================================
+RCS file: /cvsroot/hurd/hurd/pflocal/io.c,v
+retrieving revision 1.41
+diff -u -p -r1.41 io.c
+--- pflocal/io.c 29 Aug 2005 09:41:21 -0000 1.41
++++ pflocal/io.c 30 Mar 2007 15:53:02 -0000
+@@ -272,11 +272,19 @@ S_io_stat (struct sock_user *user, struc
+ struct sock *sock;
+ struct pipe *rpipe, *wpipe;
+
++#if __USE_MISC
++ void copy_time (time_value_t *from, time_t *to_sec, unsigned long *to_nsec)
++ {
++ *to_sec = from->seconds;
++ *to_nsec = from->microseconds * 1000;
++ }
++#else
+ void copy_time (time_value_t *from, time_t *to_sec, unsigned long *to_usec)
+ {
+ *to_sec = from->seconds;
+ *to_usec = from->microseconds;
+ }
++#endif
+
+ if (!user)
+ return EOPNOTSUPP;
+@@ -300,7 +308,11 @@ S_io_stat (struct sock_user *user, struc
+ if (rpipe)
+ {
+ mutex_lock (&rpipe->lock);
++#if __USE_MISC
++ copy_time (&rpipe->read_time, &st->st_atim.tv_sec, &st->st_atim.tv_nsec);
++#else
+ copy_time (&rpipe->read_time, &st->st_atime, &st->st_atime_usec);
++#endif
+ /* This seems useful. */
+ st->st_size = pipe_readable (rpipe, 1);
+ mutex_unlock (&rpipe->lock);
+@@ -309,11 +321,19 @@ S_io_stat (struct sock_user *user, struc
+ if (wpipe)
+ {
+ mutex_lock (&wpipe->lock);
++#if __USE_MISC
++ copy_time (&wpipe->write_time, &st->st_mtim.tv_sec, &st->st_mtim.tv_nsec);
++#else
+ copy_time (&wpipe->write_time, &st->st_mtime, &st->st_mtime_usec);
++#endif
+ mutex_unlock (&wpipe->lock);
+ }
+
++#if __USE_MISC
++ copy_time (&sock->change_time, &st->st_ctim.tv_sec, &st->st_ctim.tv_nsec);
++#else
+ copy_time (&sock->change_time, &st->st_ctime, &st->st_ctime_usec);
++#endif
+
+ mutex_unlock (&sock->lock);
+
+Index: ufs/inode.c
+===================================================================
+RCS file: /cvsroot/hurd/hurd/ufs/inode.c,v
+retrieving revision 1.59
+diff -u -p -r1.59 inode.c
+--- ufs/inode.c 11 Jun 2002 21:41:06 -0000 1.59
++++ ufs/inode.c 30 Mar 2007 15:53:02 -0000
+@@ -231,10 +231,11 @@ read_disknode (struct node *np)
+ | (di->di_trans ? S_IPTRANS : 0));
+ st->st_nlink = read_disk_entry (di->di_nlink);
+ st->st_size = read_disk_entry (di->di_size);
+-#ifdef notyet
+- st->st_atimespec = di->di_atime;
+- st->st_mtimespec = di->di_mtime;
+- st->st_ctimespec = di->di_ctime;
++#ifdef __USE_MISC
++ /* Correct? No need for `read_disk_entry'? Probably. */
++ st->st_atim = di->di_atime;
++ st->st_mtim = di->di_mtime;
++ st->st_ctim = di->di_ctime;
+ #else
+ st->st_atime = read_disk_entry (di->di_atime.tv_sec);
+ st->st_atime_usec = read_disk_entry (di->di_atime.tv_nsec) / 1000;
+@@ -357,10 +358,11 @@ write_node (struct node *np)
+
+ write_disk_entry (di->di_nlink, st->st_nlink);
+ write_disk_entry (di->di_size, st->st_size);
+-#ifdef notyet
+- di->di_atime = st->st_atimespec;
+- di->di_mtime = st->st_mtimespec;
+- di->di_ctime = st->st_ctimespec;
++#ifdef __USE_MISC
++ /* Correct? No need for `write_disk_entry'? Probably. */
++ di->di_atime = st->st_atim;
++ di->di_mtime = st->st_mtim;
++ di->di_ctime = st->st_ctim;
+ #else
+ write_disk_entry (di->di_atime.tv_sec, st->st_atime);
+ write_disk_entry (di->di_atime.tv_nsec, st->st_atime_usec * 1000);
+Index: usermux/node.c
+===================================================================
+RCS file: /cvsroot/hurd/hurd/usermux/node.c,v
+retrieving revision 1.3
+diff -u -p -r1.3 node.c
+--- usermux/node.c 28 Feb 1999 16:35:07 -0000 1.3
++++ usermux/node.c 30 Mar 2007 15:53:02 -0000
+@@ -80,16 +80,24 @@ netfs_attempt_utimes (struct iouser *cre
+ {
+ if (mtime)
+ {
++#if __USE_MISC
++ node->nn_stat.st_mtim = *mtime;
++#else
+ node->nn_stat.st_mtime = mtime->tv_sec;
+ node->nn_stat.st_mtime_usec = mtime->tv_nsec / 1000;
++#endif
+ }
+ else
+ flags |= TOUCH_MTIME;
+
+ if (atime)
+ {
++#if __USE_MISC
++ node->nn_stat.st_atim = *atime;
++#else
+ node->nn_stat.st_atime = atime->tv_sec;
+ node->nn_stat.st_atime_usec = atime->tv_nsec / 1000;
++#endif
+ }
+ else
+ flags |= TOUCH_ATIME;