- ds.ost_dev = ip->i_dev;
- ds.ost_ino = (short)ip->i_number;
- ds.ost_mode = (u_short)ip->i_mode;
- ds.ost_nlink = ip->i_nlink;
- ds.ost_uid = (short)ip->i_uid;
- ds.ost_gid = (short)ip->i_gid;
- ds.ost_rdev = (dev_t)ip->i_rdev;
- ds.ost_size = (int)ip->i_size;
- ds.ost_atime = (int)ip->i_atime;
- ds.ost_mtime = (int)ip->i_mtime;
- ds.ost_ctime = (int)ip->i_ctime;
- u.u_error = copyout((caddr_t)&ds, (caddr_t)ub, sizeof(ds));
+ ds.ost_dev = vattr.va_fsid;
+ ds.ost_ino = (short)vattr.va_fileid;
+ ds.ost_mode = (u_short)vattr.va_mode;
+ ds.ost_nlink = vattr.va_nlink;
+ ds.ost_uid = (short)vattr.va_uid;
+ ds.ost_gid = (short)vattr.va_gid;
+ ds.ost_rdev = (dev_t)vattr.va_rdev;
+ ds.ost_size = (int)vattr.va_size;
+ ds.ost_atime = (int)vattr.va_atime.tv_sec;
+ ds.ost_mtime = (int)vattr.va_mtime.tv_sec;
+ ds.ost_ctime = (int)vattr.va_atime.tv_sec;
+ return (copyout((caddr_t)&ds, (caddr_t)ub, sizeof(ds)));
+}
+
+/*
+ * Set IUPD and IACC times on file.
+ * Can't set ICHG.
+ */
+outime()
+{
+ register struct a {
+ char *fname;
+ time_t *tptr;
+ } *uap = (struct a *)u.u_ap;
+ struct vattr vattr;
+ time_t tv[2];
+
+ u.u_error = copyin((caddr_t)uap->tptr, (caddr_t)tv, sizeof (tv));
+ if (u.u_error)
+ return;
+ vattr_null(&vattr);
+ vattr.va_atime.tv_sec = tv[0];
+ vattr.va_atime.tv_usec = 0;
+ vattr.va_mtime.tv_sec = tv[1];
+ vattr.va_mtime.tv_usec = 0;
+ u.u_error = namesetattr(uap->fname, FOLLOW, &vattr);