bug-hurd
[Top][All Lists]
Advanced

[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: Sat, 17 Nov 2007 15:31:04 +0100
User-agent: Mutt/1.5.11

Hello!

On Tue, Nov 13, 2007 at 05:33:31PM -0800, Roland McGrath wrote:
> > I.e., the usec / nsec value of variable `st' (``struct stat'') isn't set
> > at all.  In my reading of the used ``struct ext2_inode'' (variable `di')
> > there indeed is nothing better than the sec value being provided.  Should
> > we explicitly set the usec / nsec value of `st' to zero?
> 
> Yes.  diskfs_make_node does not zero everything first, so read_node should
> set every field.

Like this?

#v+
2007-11-17  Thomas Schwinge  <tschwinge@gnu.org>

        * inode.c (read_node, write_node): Use `st->st_atim', `st->mtim',
        `st->ctim'.
        (read_node): Correctly initialize those.


Index: inode.c
===================================================================
RCS file: /cvsroot/hurd/hurd/ext2fs/inode.c,v
retrieving revision 1.62
diff -u -p -r1.62 inode.c
--- inode.c     8 Oct 2002 23:10:09 -0000       1.62
+++ inode.c     17 Nov 2007 14:22:07 -0000
@@ -216,15 +221,13 @@ read_node (struct node *np)
   st->st_size = di->i_size;
   st->st_gen = di->i_generation;
 
-  st->st_atime = di->i_atime;
-  st->st_mtime = di->i_mtime;
-  st->st_ctime = di->i_ctime;
-
-#ifdef XXX
-  st->st_atime_usec = di->i_atime.ts_nsec / 1000;
-  st->st_mtime_usec = di->i_mtime.ts_nsec / 1000;
-  st->st_ctime_usec = di->i_ctime.ts_nsec / 1000;
-#endif
+  /* The ``struct ext2_inode'' doesn't do better than sec. precision yet.  */
+  st->st_atim.tv_sec = di->i_atime;
+  st->st_atim.tv_nsec = 0;
+  st->st_mtim.tv_sec = di->i_mtime;
+  st->st_mtim.tv_nsec = 0;
+  st->st_ctim.tv_sec = di->i_ctime;
+  st->st_ctim.tv_nsec = 0;
 
   st->st_blocks = di->i_blocks;
 
@@ -446,13 +447,19 @@ write_node (struct node *np)
 
       di->i_links_count = st->st_nlink;
 
-      di->i_atime = st->st_atime;
-      di->i_mtime = st->st_mtime;
-      di->i_ctime = st->st_ctime;
-#ifdef XXX
-      di->i_atime.ts_nsec = st->st_atime_usec * 1000;
-      di->i_mtime.ts_nsec = st->st_mtime_usec * 1000;
-      di->i_ctime.ts_nsec = st->st_ctime_usec * 1000;
+      /* The ``struct ext2_inode'' doesn't do better than sec. precision
+        yet.  */
+      di->i_atime = st->st_atim.tv_sec;
+#ifdef not_yet
+      di->i_atime.ts_nsec = st->st_atim.tv_nsec;
+#endif
+      di->i_mtime = st->st_mtim.tv_sec;
+#ifdef not_yet
+      di->i_mtime.ts_nsec = st->st_mtim.tv_nsec;
+#endif
+      di->i_ctime = st->st_ctim.tv_sec;
+#ifdef not_yet
+      di->i_ctime.ts_nsec = st->st_ctim.tv_nsec;
 #endif
 
       /* Convert generic flags in ST->st_flags to ext2-specific flags in DI
#v-


Regards,
 Thomas

Attachment: signature.asc
Description: Digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]