collect all the compatibility stuff in single files
[unix-history] / usr / src / sys / kern / vfs_xxx.c
CommitLineData
02c45551 1/* vfs_xxx.c 4.6 83/05/31 */
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"
1139f919
SL
41#include "../h/kernel.h"
42
43/*
44 * Oh, how backwards compatibility is ugly!!!
45 */
46struct ostat {
47 dev_t ost_dev;
6a056086 48 u_short ost_ino;
1139f919
SL
49 u_short ost_mode;
50 short ost_nlink;
51 short ost_uid;
52 short ost_gid;
53 dev_t ost_rdev;
54 int ost_size;
55 int ost_atime;
56 int ost_mtime;
57 int ost_ctime;
58};
59
60/*
61 * The old fstat system call.
62 */
63ofstat()
64{
65 register struct file *fp;
66 register struct a {
67 int fd;
68 struct ostat *sb;
88a7a62a
SL
69 } *uap = (struct a *)u.u_ap;
70 extern struct file *getinode();
1139f919 71
88a7a62a 72 fp = getinode(uap->fd);
1139f919
SL
73 if (fp == NULL)
74 return;
88a7a62a 75 ostat1((struct inode *)fp->f_data, uap->sb);
1139f919
SL
76}
77
78/*
79 * Old stat system call. This version follows links.
80 */
81ostat()
82{
83 register struct inode *ip;
84 register struct a {
85 char *fname;
86 struct ostat *sb;
87 } *uap;
88
89 uap = (struct a *)u.u_ap;
90 ip = namei(uchar, LOOKUP, 1);
91 if (ip == NULL)
92 return;
93 ostat1(ip, uap->sb);
94 iput(ip);
95}
96
97ostat1(ip, ub)
98 register struct inode *ip;
99 struct ostat *ub;
100{
101 struct ostat ds;
102
103 IUPDAT(ip, &time, &time, 0);
104 /*
105 * Copy from inode table
106 */
107 ds.ost_dev = ip->i_dev;
108 ds.ost_ino = (short)ip->i_number;
109 ds.ost_mode = (u_short)ip->i_mode;
110 ds.ost_nlink = ip->i_nlink;
111 ds.ost_uid = (short)ip->i_uid;
112 ds.ost_gid = (short)ip->i_gid;
113 ds.ost_rdev = (dev_t)ip->i_rdev;
114 ds.ost_size = (int)ip->i_size;
115 ds.ost_atime = (int)ip->i_atime;
116 ds.ost_mtime = (int)ip->i_mtime;
117 ds.ost_ctime = (int)ip->i_ctime;
127f7d76 118 u.u_error = copyout((caddr_t)&ds, (caddr_t)ub, sizeof(ds));
1139f919 119}
02c45551
SL
120
121/*
122 * Set IUPD and IACC times on file.
123 * Can't set ICHG.
124 */
125outime()
126{
127 register struct a {
128 char *fname;
129 time_t *tptr;
130 } *uap = (struct a *)u.u_ap;
131 register struct inode *ip;
132 time_t tv[2];
133 struct timeval tv0, tv1;
134
135 if ((ip = owner(1)) == NULL)
136 return;
137 u.u_error = copyin((caddr_t)uap->tptr, (caddr_t)tv, sizeof (tv));
138 if (u.u_error == 0) {
139 ip->i_flag |= IACC|IUPD|ICHG;
140 tv0.tv_sec = tv[0]; tv0.tv_usec = 0;
141 tv1.tv_sec = tv[1]; tv1.tv_usec = 0;
142 iupdat(ip, &tv0, &tv1, 0);
143 }
144 iput(ip);
145}
1139f919 146#endif