Commit | Line | Data |
---|---|---|
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 | */ | |
18 | struct 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 | */ | |
35 | ofstat() | |
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 | */ | |
52 | ostat() | |
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 |
70 | ostat1(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 | */ | |
102 | outime() | |
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 |