[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: ``struct stat'' issue
From: |
Thomas Schwinge |
Subject: |
Re: ``struct stat'' issue |
Date: |
Fri, 5 Oct 2007 15:29:27 +0200 |
User-agent: |
Mutt/1.5.11 |
Hello!
On Sun, Jun 10, 2007 at 11:35:20PM +0200, I wrote:
> Some months ago I created some patches for the ``struct stat'' issue
> (<http://savannah.gnu.org/bugs/?18216>). Perhaps now the time has come
> for someone to review them?
It's been some further months now, but I finally sat down and reworked
the Hurd part of the patch thanks to Samuel's and Roland's comments. I
hope to spend the afternoon on reworking the glibc part.
On follow-up: do we want to modify all of the Hurd libraries and servers
(plus the GNU Mach maptime interface!) to also work on ``struct
timespec'' (with nanosecond resolution) instead of ``time_value_t'' (with
microsecond resolution; as it is used at the moment)?
#v+
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 5 Oct 2007 12:54:00 -0000
@@ -500,18 +500,12 @@ netfs_attempt_utimes (struct iouser *cre
if (! err)
{
if (mtime)
- {
- node->nn_stat.st_mtime = mtime->tv_sec;
- node->nn_stat.st_mtime_usec = mtime->tv_nsec / 1000;
- }
+ node->nn_stat.st_mtim = *mtime;
else
flags |= TOUCH_MTIME;
if (atime)
- {
- node->nn_stat.st_atime = atime->tv_sec;
- node->nn_stat.st_atime_usec = atime->tv_nsec / 1000;
- }
+ node->nn_stat.st_atim = *atime;
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 5 Oct 2007 12:54:00 -0000
@@ -173,18 +173,12 @@ netfs_attempt_utimes (struct iouser *cre
if (! err)
{
if (mtime)
- {
- np->nn_stat.st_mtime = mtime->tv_sec;
- np->nn_stat.st_mtime_usec = mtime->tv_nsec / 1000;
- }
+ np->nn_stat.st_mtim = *mtime;
else
flags |= TOUCH_MTIME;
if (atime)
- {
- np->nn_stat.st_atime = atime->tv_sec;
- np->nn_stat.st_atime_usec = atime->tv_nsec / 1000;
- }
+ np->nn_stat.st_atim = *atime;
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 5 Oct 2007 12:54:00 -0000
@@ -385,9 +385,7 @@ read_node (struct node *np, vm_address_t
{
struct timespec ts;
fat_to_epoch (dr->write_date, dr->write_time, &ts);
- 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;
+ st->st_ctim = st->st_mtim = st->st_atim = ts;
}
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 5 Oct 2007 12:54:00 -0000
@@ -75,18 +75,12 @@ netfs_attempt_utimes (struct iouser *cre
if (! err)
{
if (atime)
- {
- node->nn_stat.st_atime = atime->tv_sec;
- node->nn_stat.st_atime_usec = atime->tv_nsec / 1000;
- }
+ node->nn_stat.st_atim = *atime;
else
flags |= TOUCH_ATIME;
if (mtime)
- {
- node->nn_stat.st_mtime = mtime->tv_sec;
- node->nn_stat.st_mtime_usec = mtime->tv_nsec / 1000;
- }
+ node->nn_stat.st_mtim = *mtime;
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 5 Oct 2007 12:54:00 -0000
@@ -77,18 +77,12 @@ netfs_attempt_utimes (struct iouser *cre
if (! err)
{
if (mtime)
- {
- node->nn_stat.st_mtime = mtime->tv_sec;
- node->nn_stat.st_mtime_usec = mtime->tv_nsec / 1000;
- }
+ node->nn_stat.st_mtim = *mtime;
else
flags |= TOUCH_MTIME;
if (atime)
- {
- node->nn_stat.st_atime = atime->tv_sec;
- node->nn_stat.st_atime_usec = atime->tv_nsec / 1000;
- }
+ node->nn_stat.st_atim = *atime;
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 5 Oct 2007 12:54:03 -0000
@@ -431,31 +431,20 @@ read_disknode (struct node *np, struct d
{
struct timespec ts;
isodate_915 (dr->date, &ts);
- 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;
+ st->st_ctim = st->st_mtim = st->st_atim = ts;
}
/* Override what we have better info for */
if (rl->valid & VALID_TF)
{
if (rl->tfflags & TF_CREATION)
- {
- st->st_ctime = rl->ctime.tv_sec;
- st->st_ctime_usec = rl->ctime.tv_nsec / 1000;
- }
+ st->st_ctim = rl->ctime;
if (rl->tfflags & TF_ACCESS)
- {
- st->st_atime = rl->atime.tv_sec;
- st->st_atime_usec = rl->atime.tv_nsec / 1000;
- }
+ st->st_atim = rl->atime;
if (rl->tfflags & TF_MODIFY)
- {
- st->st_mtime = rl->mtime.tv_sec;
- st->st_mtime_usec = rl->mtime.tv_nsec / 1000;
- }
+ st->st_mtim = rl->mtime;
}
st->st_blksize = logical_block_size;
Index: libdiskfs/node-times.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libdiskfs/node-times.c,v
retrieving revision 1.13
diff -u -p -r1.13 node-times.c
--- libdiskfs/node-times.c 5 Oct 2007 10:16:23 -0000 1.13
+++ libdiskfs/node-times.c 5 Oct 2007 12:54:03 -0000
@@ -51,37 +51,22 @@ 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;
-#else
- np->dn_stat.st_mtime = t.tv_sec;
- np->dn_stat.st_mtime_usec = t.tv_usec;
-#endif
+ np->dn_stat.st_mtim.tv_sec = t.tv_sec;
+ np->dn_stat.st_mtim.tv_nsec = t.tv_usec * 1000;
np->dn_stat_dirty = 1;
np->dn_set_mtime = 0;
}
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;
-#else
- np->dn_stat.st_atime = t.tv_sec;
- np->dn_stat.st_atime_usec = t.tv_usec;
-#endif
+ np->dn_stat.st_atim.tv_sec = t.tv_sec;
+ np->dn_stat.st_atim.tv_nsec = t.tv_usec * 1000;
np->dn_stat_dirty = 1;
np->dn_set_atime = 0;
}
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;
-#else
- np->dn_stat.st_ctime = t.tv_sec;
- np->dn_stat.st_ctime_usec = t.tv_usec;
-#endif
+ np->dn_stat.st_ctim.tv_sec = t.tv_sec;
+ np->dn_stat.st_ctim.tv_nsec = t.tv_usec * 1000;
np->dn_stat_dirty = 1;
np->dn_set_ctime = 0;
}
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 5 Oct 2007 12:54:03 -0000
@@ -32,17 +32,17 @@ fshelp_touch (struct stat *st, unsigned
if (what & TOUCH_ATIME)
{
- st->st_atime = tv.tv_sec;
- st->st_atime_usec = tv.tv_usec;
+ st->st_atim.tv_sec = tv.tv_sec;
+ st->st_atim.tv_nsec = tv.tv_usec * 1000;
}
if (what & TOUCH_CTIME)
{
- st->st_ctime = tv.tv_sec;
- st->st_ctime_usec = tv.tv_usec;
+ st->st_ctim.tv_sec = tv.tv_sec;
+ st->st_ctim.tv_nsec = tv.tv_usec * 1000;
}
if (what & TOUCH_MTIME)
{
- st->st_mtime = tv.tv_sec;
- st->st_mtime_usec = tv.tv_usec;
+ st->st_mtim.tv_sec = tv.tv_sec;
+ st->st_mtim.tv_nsec = tv.tv_usec * 1000;
}
}
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 5 Oct 2007 12:54:03 -0000
@@ -25,8 +25,8 @@ trivfs_set_atime (struct trivfs_control
time_value_t mtime;
io_stat (cntl->underlying, &st);
- mtime.seconds = st.st_mtime;
- mtime.microseconds = st.st_mtime_usec;
+ mtime.seconds = st.st_mtim.tv_sec;
+ mtime.microseconds = st.st_mtim.tv_nsec / 1000;
atime.microseconds = -1;
file_utimes (cntl->underlying, atime, mtime);
return 0;
@@ -40,8 +40,8 @@ trivfs_set_mtime (struct trivfs_control
time_value_t mtime;
io_stat (cntl->underlying, &st);
- atime.seconds = st.st_atime;
- atime.microseconds = st.st_atime_usec;
+ atime.seconds = st.st_atim.tv_sec;
+ atime.microseconds = st.st_atim.tv_nsec / 1000;
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 5 Oct 2007 12:54:04 -0000
@@ -335,10 +335,10 @@ xdr_encode_sattr_stat (int *p,
*(p++) = htonl (st->st_uid);
*(p++) = htonl (st->st_gid);
*(p++) = htonl (st->st_size);
- *(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_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
{
@@ -351,11 +351,11 @@ 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 */
- *(p++) = htonl (st->st_atime);
- *(p++) = htonl (st->st_atime_usec * 1000);
+ *(p++) = htonl (st->st_atim.tv_sec);
+ *(p++) = htonl (st->st_atim.tv_nsec);
*(p++) = htonl (SET_TO_CLIENT_TIME); /* set mtime */
- *(p++) = htonl (st->st_mtime);
- *(p++) = htonl (st->st_mtime_usec * 1000);
+ *(p++) = htonl (st->st_mtim.tv_sec);
+ *(p++) = htonl (st->st_mtim.tv_nsec);
}
return p;
}
@@ -442,24 +442,24 @@ xdr_decode_fattr (int *p, struct stat *s
p++;
st->st_ino = ntohl (*p);
p++;
- st->st_atime = ntohl (*p);
+ st->st_atim.tv_sec = ntohl (*p);
p++;
- st->st_atime_usec = ntohl (*p);
+ st->st_atim.tv_nsec = ntohl (*p);
p++;
- st->st_mtime = ntohl (*p);
+ st->st_mtim.tv_sec = ntohl (*p);
p++;
- st->st_mtime_usec = ntohl (*p);
+ st->st_mtim.tv_nsec = ntohl (*p);
p++;
- st->st_ctime = ntohl (*p);
+ st->st_ctim.tv_sec = ntohl (*p);
p++;
- st->st_ctime_usec = ntohl (*p);
+ st->st_ctim.tv_nsec = ntohl (*p);
p++;
- if (protocol_version == 3)
+ if (protocol_version < 3)
{
- st->st_atime_usec /= 1000;
- st->st_mtime_usec /= 1000;
- st->st_ctime_usec /= 1000;
+ st->st_atim.tv_nsec *= 1000;
+ st->st_mtim.tv_nsec *= 1000;
+ st->st_ctim.tv_nsec *= 1000;
}
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 5 Oct 2007 12:54:04 -0000
@@ -104,18 +104,18 @@ complete_setattr (mach_port_t port,
mtime.microseconds = 0;
if (atime.seconds == -1)
- atime.seconds = st.st_atime;
+ atime.seconds = st.st_atim.tv_sec;
if (atime.microseconds == -1)
- atime.microseconds = st.st_atime_usec;
+ atime.microseconds = st.st_atim.tv_nsec / 1000;
if (mtime.seconds == -1)
- mtime.seconds = st.st_mtime;
+ mtime.seconds = st.st_mtim.tv_sec;
if (mtime.microseconds == -1)
- mtime.microseconds = st.st_mtime_usec;
+ mtime.microseconds = st.st_mtim.tv_nsec / 1000;
- if (atime.seconds != st.st_atime
- || atime.microseconds != st.st_atime_usec
- || mtime.seconds != st.st_mtime
- || mtime.microseconds != st.st_mtime_usec)
+ 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)
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 5 Oct 2007 12:54:04 -0000
@@ -76,12 +76,12 @@ encode_fattr (int *p, struct stat *st, i
*(p++) = htonl (st->st_blocks);
*(p++) = htonl (st->st_fsid);
*(p++) = htonl (st->st_ino);
- *(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);
+ *(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);
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 5 Oct 2007 12:54:04 -0000
@@ -272,10 +272,10 @@ S_io_stat (struct sock_user *user, struc
struct sock *sock;
struct pipe *rpipe, *wpipe;
- void copy_time (time_value_t *from, time_t *to_sec, unsigned long *to_usec)
+ void copy_time (time_value_t *from, time_t *to_sec, unsigned long *to_nsec)
{
*to_sec = from->seconds;
- *to_usec = from->microseconds;
+ *to_nsec = from->microseconds * 1000;
}
if (!user)
@@ -300,7 +300,7 @@ S_io_stat (struct sock_user *user, struc
if (rpipe)
{
mutex_lock (&rpipe->lock);
- copy_time (&rpipe->read_time, &st->st_atime, &st->st_atime_usec);
+ copy_time (&rpipe->read_time, &st->st_atim.tv_sec, &st->st_atim.tv_nsec);
/* This seems useful. */
st->st_size = pipe_readable (rpipe, 1);
mutex_unlock (&rpipe->lock);
@@ -309,11 +309,11 @@ S_io_stat (struct sock_user *user, struc
if (wpipe)
{
mutex_lock (&wpipe->lock);
- copy_time (&wpipe->write_time, &st->st_mtime, &st->st_mtime_usec);
+ copy_time (&wpipe->write_time, &st->st_mtim.tv_sec,
&st->st_mtim.tv_nsec);
mutex_unlock (&wpipe->lock);
}
- copy_time (&sock->change_time, &st->st_ctime, &st->st_ctime_usec);
+ copy_time (&sock->change_time, &st->st_ctim.tv_sec, &st->st_ctim.tv_nsec);
mutex_unlock (&sock->lock);
Index: ufs/inode.c
===================================================================
RCS file: /cvsroot/hurd/hurd/ufs/inode.c,v
retrieving revision 1.62
diff -u -p -r1.62 inode.c
--- ufs/inode.c 5 Oct 2007 10:00:44 -0000 1.62
+++ ufs/inode.c 5 Oct 2007 12:54:04 -0000
@@ -233,18 +233,12 @@ 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;
-#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;
- st->st_mtime = read_disk_entry (di->di_mtime.tv_sec);
- st->st_mtime_usec = read_disk_entry (di->di_mtime.tv_nsec) / 1000;
- st->st_ctime = read_disk_entry (di->di_ctime.tv_sec);
- st->st_ctime_usec = read_disk_entry (di->di_ctime.tv_nsec) / 1000;
-#endif
+ st->st_atim.tv_sec = read_disk_entry (di->di_atime.tv_sec);
+ st->st_atim.tv_nsec = read_disk_entry (di->di_atime.tv_nsec);
+ st->st_mtim.tv_sec = read_disk_entry (di->di_mtime.tv_sec);
+ st->st_mtim.tv_nsec = read_disk_entry (di->di_mtime.tv_nsec);
+ st->st_ctim.tv_sec = read_disk_entry (di->di_ctime.tv_sec);
+ st->st_ctim.tv_nsec = read_disk_entry (di->di_ctime.tv_nsec);
st->st_blksize = sblock->fs_bsize;
st->st_blocks = read_disk_entry (di->di_blocks);
st->st_flags = read_disk_entry (di->di_flags);
@@ -359,18 +353,12 @@ 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;
-#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);
- write_disk_entry (di->di_mtime.tv_sec, st->st_mtime);
- write_disk_entry (di->di_mtime.tv_nsec, st->st_mtime_usec * 1000);
- write_disk_entry (di->di_ctime.tv_sec, st->st_ctime);
- write_disk_entry (di->di_ctime.tv_nsec, st->st_ctime_usec * 1000);
-#endif
+ write_disk_entry (di->di_atime.tv_sec, st->st_atim.tv_sec);
+ write_disk_entry (di->di_atime.tv_nsec, st->st_atim.tv_nsec);
+ write_disk_entry (di->di_mtime.tv_sec, st->st_mtim.tv_sec);
+ write_disk_entry (di->di_mtime.tv_nsec, st->st_mtim.tv_nsec);
+ write_disk_entry (di->di_ctime.tv_sec, st->st_ctim.tv_sec);
+ write_disk_entry (di->di_ctime.tv_nsec, st->st_ctim.tv_nsec);
write_disk_entry (di->di_blocks, st->st_blocks);
write_disk_entry (di->di_flags, st->st_flags);
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 5 Oct 2007 12:54:04 -0000
@@ -79,18 +79,12 @@ netfs_attempt_utimes (struct iouser *cre
if (! err)
{
if (mtime)
- {
- node->nn_stat.st_mtime = mtime->tv_sec;
- node->nn_stat.st_mtime_usec = mtime->tv_nsec / 1000;
- }
+ node->nn_stat.st_mtim = *mtime;
else
flags |= TOUCH_MTIME;
if (atime)
- {
- node->nn_stat.st_atime = atime->tv_sec;
- node->nn_stat.st_atime_usec = atime->tv_nsec / 1000;
- }
+ node->nn_stat.st_atim = *atime;
else
flags |= TOUCH_ATIME;
#v-
Regards,
Thomas
signature.asc
Description: Digital signature
- Re: ``struct stat'' issue,
Thomas Schwinge <=