date and time created 82/12/28 22:57:13 by sam
[unix-history] / usr / src / sys / kern / vfs_xxx.c
CommitLineData
6a056086 1/* vfs_xxx.c 4.3 82/12/28 */
2a9ead0d
BJ
2
3#include "../h/param.h"
4#include "../h/systm.h"
5#include "../h/inode.h"
6#include "../h/fs.h"
7#include "../h/mount.h"
8#include "../h/dir.h"
9#include "../h/user.h"
10#include "../h/buf.h"
11#include "../h/conf.h"
12
13/*
14 * Return the next character fromt the
15 * kernel string pointed at by dirp.
16 */
17schar()
18{
19 return (*u.u_dirp++ & 0377);
20}
21
22/*
23 * Return the next character from the
24 * user string pointed at by dirp.
25 */
26uchar()
27{
28 register c;
29
30 c = fubyte(u.u_dirp++);
31 if (c == -1) {
32 u.u_error = EFAULT;
33 c = 0;
34 }
35 return (c);
36}
1139f919
SL
37
38#ifndef NOCOMPAT
39#include "../h/file.h"
40#include "../h/nami.h"
41#include "../h/descrip.h"
42#include "../h/kernel.h"
43
44/*
45 * Oh, how backwards compatibility is ugly!!!
46 */
47struct ostat {
48 dev_t ost_dev;
6a056086 49 u_short ost_ino;
1139f919
SL
50 u_short ost_mode;
51 short ost_nlink;
52 short ost_uid;
53 short ost_gid;
54 dev_t ost_rdev;
55 int ost_size;
56 int ost_atime;
57 int ost_mtime;
58 int ost_ctime;
59};
60
61/*
62 * The old fstat system call.
63 */
64ofstat()
65{
66 register struct file *fp;
67 register struct a {
68 int fd;
69 struct ostat *sb;
70 } *uap;
71
72 uap = (struct a *)u.u_ap;
73 fp = getf(uap->fd);
74 if (fp == NULL)
75 return;
76 if (fp->f_type == DTYPE_SOCKET) {
77 struct ostat ub;
78
79 bzero((caddr_t)&ub, sizeof (ub));
80 (void) copyout((caddr_t)&ub, (caddr_t)uap->sb, sizeof (ub));
81 } else
82 ostat1(fp->f_inode, uap->sb);
83}
84
85/*
86 * Old stat system call. This version follows links.
87 */
88ostat()
89{
90 register struct inode *ip;
91 register struct a {
92 char *fname;
93 struct ostat *sb;
94 } *uap;
95
96 uap = (struct a *)u.u_ap;
97 ip = namei(uchar, LOOKUP, 1);
98 if (ip == NULL)
99 return;
100 ostat1(ip, uap->sb);
101 iput(ip);
102}
103
104ostat1(ip, ub)
105 register struct inode *ip;
106 struct ostat *ub;
107{
108 struct ostat ds;
109
110 IUPDAT(ip, &time, &time, 0);
111 /*
112 * Copy from inode table
113 */
114 ds.ost_dev = ip->i_dev;
115 ds.ost_ino = (short)ip->i_number;
116 ds.ost_mode = (u_short)ip->i_mode;
117 ds.ost_nlink = ip->i_nlink;
118 ds.ost_uid = (short)ip->i_uid;
119 ds.ost_gid = (short)ip->i_gid;
120 ds.ost_rdev = (dev_t)ip->i_rdev;
121 ds.ost_size = (int)ip->i_size;
122 ds.ost_atime = (int)ip->i_atime;
123 ds.ost_mtime = (int)ip->i_mtime;
124 ds.ost_ctime = (int)ip->i_ctime;
125 if (copyout((caddr_t)&ds, (caddr_t)ub, sizeof(ds)) < 0)
126 u.u_error = EFAULT;
127}
128#endif