add some missing returns, correct args to ipcaccess, general cleanup
[unix-history] / usr / src / sys / kern / vfs_xxx.c
CommitLineData
da7c5cc6 1/*
0880b18e 2 * Copyright (c) 1982, 1986 Regents of the University of California.
da7c5cc6
KM
3 * All rights reserved. The Berkeley software License Agreement
4 * specifies the terms and conditions for redistribution.
5 *
15d436e0 6 * @(#)vfs_xxx.c 7.3 (Berkeley) %G%
da7c5cc6 7 */
2a9ead0d 8
41c66374 9#ifdef COMPAT
94368568 10#include "param.h"
94368568 11#include "user.h"
41c66374 12#include "vnode.h"
94368568 13#include "file.h"
1139f919
SL
14
15/*
16 * Oh, how backwards compatibility is ugly!!!
17 */
18struct ostat {
19 dev_t ost_dev;
6a056086 20 u_short ost_ino;
1139f919
SL
21 u_short ost_mode;
22 short ost_nlink;
23 short ost_uid;
24 short ost_gid;
25 dev_t ost_rdev;
26 int ost_size;
27 int ost_atime;
28 int ost_mtime;
29 int ost_ctime;
30};
31
32/*
33 * The old fstat system call.
34 */
35ofstat()
36{
41c66374 37 struct file *fp;
1139f919
SL
38 register struct a {
39 int fd;
40 struct ostat *sb;
88a7a62a 41 } *uap = (struct a *)u.u_ap;
1139f919 42
41c66374
KM
43 u.u_error = getvnode(uap->fd, &fp);
44 if (u.u_error)
1139f919 45 return;
41c66374 46 u.u_error = ostat1((struct inode *)fp->f_data, uap->sb);
1139f919
SL
47}
48
49/*
50 * Old stat system call. This version follows links.
51 */
52ostat()
53{
41c66374 54 register struct vnode *vp;
1139f919
SL
55 register struct a {
56 char *fname;
57 struct ostat *sb;
715baff1
KM
58 } *uap = (struct a *)u.u_ap;
59 register struct nameidata *ndp = &u.u_nd;
1139f919 60
715baff1
KM
61 ndp->ni_nameiop = LOOKUP | FOLLOW;
62 ndp->ni_segflg = UIO_USERSPACE;
63 ndp->ni_dirp = uap->fname;
41c66374 64 if (u.u_error = namei(ndp))
1139f919 65 return;
41c66374
KM
66 ostat1(ndp->ni_vp, uap->sb);
67 vrele(ndp->ni_vp);
1139f919
SL
68}
69
41c66374
KM
70ostat1(vp, ub)
71 register struct vnode *vp;
1139f919
SL
72 struct ostat *ub;
73{
74 struct ostat ds;
41c66374
KM
75 struct vattr vattr;
76 int error;
1139f919 77
15d436e0 78 error = VOP_GETATTR(vp, &vattr, u.u_cred);
41c66374
KM
79 if (error)
80 return(error);
1139f919
SL
81 /*
82 * Copy from inode table
83 */
41c66374
KM
84 ds.ost_dev = vattr.va_fsid;
85 ds.ost_ino = (short)vattr.va_fileid;
86 ds.ost_mode = (u_short)vattr.va_mode;
87 ds.ost_nlink = vattr.va_nlink;
88 ds.ost_uid = (short)vattr.va_uid;
89 ds.ost_gid = (short)vattr.va_gid;
90 ds.ost_rdev = (dev_t)vattr.va_rdev;
91 ds.ost_size = (int)vattr.va_size;
92 ds.ost_atime = (int)vattr.va_atime.tv_sec;
93 ds.ost_mtime = (int)vattr.va_mtime.tv_sec;
94 ds.ost_ctime = (int)vattr.va_atime.tv_sec;
95 return (copyout((caddr_t)&ds, (caddr_t)ub, sizeof(ds)));
1139f919 96}
02c45551
SL
97
98/*
99 * Set IUPD and IACC times on file.
100 * Can't set ICHG.
101 */
102outime()
103{
104 register struct a {
105 char *fname;
106 time_t *tptr;
107 } *uap = (struct a *)u.u_ap;
41c66374 108 struct vattr vattr;
02c45551 109 time_t tv[2];
02c45551 110
02c45551 111 u.u_error = copyin((caddr_t)uap->tptr, (caddr_t)tv, sizeof (tv));
41c66374
KM
112 if (u.u_error)
113 return;
114 vattr_null(&vattr);
115 vattr.va_atime.tv_sec = tv[0];
116 vattr.va_atime.tv_usec = 0;
117 vattr.va_mtime.tv_sec = tv[1];
118 vattr.va_mtime.tv_usec = 0;
119 u.u_error = namesetattr(uap->fname, FOLLOW, &vattr);
02c45551 120}
1139f919 121#endif