Berkeley copyright notice
[unix-history] / usr / src / sys / kern / vfs_xxx.c
index 21b271f..1ea802d 100644 (file)
@@ -1,45 +1,16 @@
-/*     vfs_xxx.c       4.4     82/12/28        */
-
-#include "../h/param.h"
-#include "../h/systm.h"
-#include "../h/inode.h"
-#include "../h/fs.h"
-#include "../h/mount.h"
-#include "../h/dir.h"
-#include "../h/user.h"
-#include "../h/buf.h"
-#include "../h/conf.h"
-
-/*
- * Return the next character fromt the
- * kernel string pointed at by dirp.
- */
-schar()
-{
-       return (*u.u_dirp++ & 0377);
-}
-
 /*
 /*
- * Return the next character from the
- * user string pointed at by dirp.
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved.  The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ *
+ *     @(#)vfs_xxx.c   7.3 (Berkeley) %G%
  */
  */
-uchar()
-{
-       register c;
-
-       c = fubyte(u.u_dirp++);
-       if (c == -1) {
-               u.u_error = EFAULT;
-               c = 0;
-       }
-       return (c);
-}
 
 
-#ifndef NOCOMPAT
-#include "../h/file.h"
-#include "../h/nami.h"
-#include "../h/descrip.h"
-#include "../h/kernel.h"
+#ifdef COMPAT
+#include "param.h"
+#include "user.h"
+#include "vnode.h"
+#include "file.h"
 
 /*
  * Oh, how backwards compatibility is ugly!!!
 
 /*
  * Oh, how backwards compatibility is ugly!!!
@@ -63,23 +34,16 @@ struct      ostat {
  */
 ofstat()
 {
  */
 ofstat()
 {
-       register struct file *fp;
+       struct file *fp;
        register struct a {
                int     fd;
                struct ostat *sb;
        register struct a {
                int     fd;
                struct ostat *sb;
-       } *uap;
+       } *uap = (struct a *)u.u_ap;
 
 
-       uap = (struct a *)u.u_ap;
-       fp = getf(uap->fd);
-       if (fp == NULL)
+       u.u_error = getvnode(uap->fd, &fp);
+       if (u.u_error)
                return;
                return;
-       if (fp->f_type == DTYPE_SOCKET) {
-               struct ostat ub;
-
-               bzero((caddr_t)&ub, sizeof (ub));
-               (void) copyout((caddr_t)&ub, (caddr_t)uap->sb, sizeof (ub));
-       } else
-               ostat1(fp->f_inode, uap->sb);
+       u.u_error = ostat1((struct inode *)fp->f_data, uap->sb);
 }
 
 /*
 }
 
 /*
@@ -87,41 +51,71 @@ ofstat()
  */
 ostat()
 {
  */
 ostat()
 {
-       register struct inode *ip;
+       register struct vnode *vp;
        register struct a {
                char    *fname;
                struct ostat *sb;
        register struct a {
                char    *fname;
                struct ostat *sb;
-       } *uap;
+       } *uap = (struct a *)u.u_ap;
+       register struct nameidata *ndp = &u.u_nd;
 
 
-       uap = (struct a *)u.u_ap;
-       ip = namei(uchar, LOOKUP, 1);
-       if (ip == NULL)
+       ndp->ni_nameiop = LOOKUP | FOLLOW;
+       ndp->ni_segflg = UIO_USERSPACE;
+       ndp->ni_dirp = uap->fname;
+       if (u.u_error = namei(ndp))
                return;
                return;
-       ostat1(ip, uap->sb);
-       iput(ip);
+       ostat1(ndp->ni_vp, uap->sb);
+       vrele(ndp->ni_vp);
 }
 
 }
 
-ostat1(ip, ub)
-       register struct inode *ip;
+ostat1(vp, ub)
+       register struct vnode *vp;
        struct ostat *ub;
 {
        struct ostat ds;
        struct ostat *ub;
 {
        struct ostat ds;
+       struct vattr vattr;
+       int error;
 
 
-       IUPDAT(ip, &time, &time, 0);
+       error = VOP_GETATTR(vp, &vattr, u.u_cred);
+       if (error)
+               return(error);
        /*
         * Copy from inode table
         */
        /*
         * 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));
+       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);
 }
 #endif
 }
 #endif