X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/02c45551ed6e685f527b4a0b5f3031fe1c279d5b..fccd027da655d674c3552702cd6424e0be14bf8d:/usr/src/sys/kern/vfs_xxx.c diff --git a/usr/src/sys/kern/vfs_xxx.c b/usr/src/sys/kern/vfs_xxx.c index 0c5c8ccd72..1ea802db0b 100644 --- a/usr/src/sys/kern/vfs_xxx.c +++ b/usr/src/sys/kern/vfs_xxx.c @@ -1,44 +1,16 @@ -/* vfs_xxx.c 4.6 83/05/31 */ - -#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. + * 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% */ -schar() -{ - return (*u.u_dirp++ & 0377); -} -/* - * Return the next character from the - * user string pointed at by dirp. - */ -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/kernel.h" +#ifdef COMPAT +#include "param.h" +#include "user.h" +#include "vnode.h" +#include "file.h" /* * Oh, how backwards compatibility is ugly!!! @@ -62,17 +34,16 @@ struct ostat { */ ofstat() { - register struct file *fp; + struct file *fp; register struct a { int fd; struct ostat *sb; } *uap = (struct a *)u.u_ap; - extern struct file *getinode(); - fp = getinode(uap->fd); - if (fp == NULL) + u.u_error = getvnode(uap->fd, &fp); + if (u.u_error) return; - ostat1((struct inode *)fp->f_data, uap->sb); + u.u_error = ostat1((struct inode *)fp->f_data, uap->sb); } /* @@ -80,42 +51,48 @@ ofstat() */ ostat() { - register struct inode *ip; + register struct vnode *vp; 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; - 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 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 */ - 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))); } /* @@ -128,19 +105,17 @@ outime() char *fname; time_t *tptr; } *uap = (struct a *)u.u_ap; - register struct inode *ip; + struct vattr vattr; time_t tv[2]; - struct timeval tv0, tv1; - if ((ip = owner(1)) == NULL) - return; u.u_error = copyin((caddr_t)uap->tptr, (caddr_t)tv, sizeof (tv)); - if (u.u_error == 0) { - ip->i_flag |= IACC|IUPD|ICHG; - tv0.tv_sec = tv[0]; tv0.tv_usec = 0; - tv1.tv_sec = tv[1]; tv1.tv_usec = 0; - iupdat(ip, &tv0, &tv1, 0); - } - iput(ip); + 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