]> Zhao Yanbai Git Server - minix.git/commitdiff
hgfs: fix atime/mtime attribute setting bug
authorDavid van Moolenbroek <david@minix3.org>
Fri, 23 Dec 2011 18:02:57 +0000 (19:02 +0100)
committerDavid van Moolenbroek <david@minix3.org>
Fri, 23 Dec 2011 18:02:57 +0000 (19:02 +0100)
Reported and investigated by Antoine Leca.

common/include/minix/hgfs.h
lib/libhgfs/attr.c
servers/hgfs/stat.c

index 1d5a0dd890027120a7affa1da7e9bf2ed0f246fe..96b8f5da48263fb5cacde09f172f910cbe82c621 100644 (file)
@@ -25,9 +25,12 @@ struct hgfs_attr {
 #define HGFS_ATTR_MTIME                0x08    /* get/set file modification time */
 #define HGFS_ATTR_CTIME                0x10    /* get/set file change time */
 #define HGFS_ATTR_MODE         0x20    /* get/set file mode */
+#define HGFS_ATTR_ATIME_SET    0x40    /* set specific file access time */
+#define HGFS_ATTR_MTIME_SET    0x80    /* set specific file modify time */
 #define HGFS_ATTR_ALL          \
        (HGFS_ATTR_SIZE | HGFS_ATTR_CRTIME | HGFS_ATTR_ATIME | \
-       HGFS_ATTR_MTIME | HGFS_ATTR_CTIME | HGFS_ATTR_MODE)
+       HGFS_ATTR_MTIME | HGFS_ATTR_CTIME | HGFS_ATTR_MODE | \
+       HGFS_ATTR_ATIME_SET | HGFS_ATTR_MTIME_SET)
 
 _PROTOTYPE( int hgfs_init, (void)                                      );
 _PROTOTYPE( void hgfs_cleanup, (void)                                  );
index 12fe0e7338de69aa3498f237b30ea904fb082a2e..e68138fd0a0f9233eb10a9f9f13e93e72ca4042d 100644 (file)
@@ -74,8 +74,8 @@ struct hgfs_attr *attr;
   RPC_NEXT32 = ex64hi(attr->a_size);
 
   time_put((attr->a_mask & HGFS_ATTR_CRTIME) ? &attr->a_crtime : NULL);
-  time_put((attr->a_mask & HGFS_ATTR_ATIME) ? &attr->a_atime : NULL);
-  time_put((attr->a_mask & HGFS_ATTR_MTIME) ? &attr->a_mtime : NULL);
+  time_put((attr->a_mask & HGFS_ATTR_ATIME_SET) ? &attr->a_atime : NULL);
+  time_put((attr->a_mask & HGFS_ATTR_MTIME_SET) ? &attr->a_mtime : NULL);
   time_put((attr->a_mask & HGFS_ATTR_CTIME) ? &attr->a_ctime : NULL);
 
   RPC_NEXT8 = HGFS_MODE_TO_PERM(attr->a_mode);
index 727302c46d4a5dbe6ef4cb2b3d3a8efe59023498..d7f04eb1b297b886f0013932f17957c016bd6b24 100644 (file)
@@ -157,7 +157,8 @@ PUBLIC int do_utime()
   if ((r = verify_inode(ino, path, NULL)) != OK)
        return r;
 
-  attr.a_mask = HGFS_ATTR_ATIME | HGFS_ATTR_MTIME;
+  attr.a_mask = HGFS_ATTR_ATIME | HGFS_ATTR_MTIME | HGFS_ATTR_ATIME_SET |
+       HGFS_ATTR_MTIME_SET;
   attr.a_atime = m_in.REQ_ACTIME;
   attr.a_mtime = m_in.REQ_MODTIME;