+ register struct inode *ip;
+ register struct a {
+ char *fname;
+ struct ostat *sb;
+ } *uap = (struct a *)u.u_ap;
+ register struct nameidata *ndp = &u.u_nd;
+
+ ndp->ni_nameiop = LOOKUP | FOLLOW;
+ ndp->ni_segflg = UIO_USERSPACE;
+ ndp->ni_dirp = uap->fname;
+ ip = namei(ndp);
+ if (ip == NULL)
+ return;
+ ostat1(ip, uap->sb);
+ iput(ip);
+}
+
+ostat1(ip, ub)
+ register struct inode *ip;
+ struct ostat *ub;
+{
+ struct ostat ds;
+
+ IUPDAT(ip, &time, &time, 0);
+ /*
+ * Copy from inode table
+ */
+ 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));