Deleted Added
full compact
ibcs2_xenix.c (107839) ibcs2_xenix.c (107849)
1/*-
2 * Copyright (c) 1994 Sean Eric Fagan
3 * Copyright (c) 1994 S�ren Schmidt
4 * Copyright (c) 1995 Steven Wallace
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 13 unchanged lines hidden (view full) ---

22 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 *
1/*-
2 * Copyright (c) 1994 Sean Eric Fagan
3 * Copyright (c) 1994 S�ren Schmidt
4 * Copyright (c) 1995 Steven Wallace
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 13 unchanged lines hidden (view full) ---

22 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 *
30 * $FreeBSD: head/sys/i386/ibcs2/ibcs2_xenix.c 107839 2002-12-13 22:41:47Z alfred $
30 * $FreeBSD: head/sys/i386/ibcs2/ibcs2_xenix.c 107849 2002-12-14 01:56:26Z alfred $
31 */
32
33#include <sys/param.h>
34#include <sys/systm.h>
35#include <sys/namei.h>
36#include <sys/sysproto.h>
37#include <sys/jail.h>
38#include <sys/kernel.h>

--- 35 unchanged lines hidden (view full) ---

74 struct thread *td;
75 struct xenix_rdchk_args *uap;
76{
77 int error;
78 struct ioctl_args sa;
79 caddr_t sg = stackgap_init();
80
81 DPRINTF(("IBCS2: 'xenix rdchk'\n"));
31 */
32
33#include <sys/param.h>
34#include <sys/systm.h>
35#include <sys/namei.h>
36#include <sys/sysproto.h>
37#include <sys/jail.h>
38#include <sys/kernel.h>

--- 35 unchanged lines hidden (view full) ---

74 struct thread *td;
75 struct xenix_rdchk_args *uap;
76{
77 int error;
78 struct ioctl_args sa;
79 caddr_t sg = stackgap_init();
80
81 DPRINTF(("IBCS2: 'xenix rdchk'\n"));
82 SCARG(&sa, fd) = SCARG(uap, fd);
83 SCARG(&sa, com) = FIONREAD;
84 SCARG(&sa, data) = stackgap_alloc(&sg, sizeof(int));
82 sa.fd = uap->fd;
83 sa.com = FIONREAD;
84 sa.data = stackgap_alloc(&sg, sizeof(int));
85 if ((error = ioctl(td, &sa)) != 0)
86 return error;
85 if ((error = ioctl(td, &sa)) != 0)
86 return error;
87 td->td_retval[0] = (*((int*)SCARG(&sa, data))) ? 1 : 0;
87 td->td_retval[0] = (*((int*)sa.data)) ? 1 : 0;
88 return 0;
89}
90
91int
92xenix_chsize(td, uap)
93 struct thread *td;
94 struct xenix_chsize_args *uap;
95{
96 struct ftruncate_args sa;
97
98 DPRINTF(("IBCS2: 'xenix chsize'\n"));
88 return 0;
89}
90
91int
92xenix_chsize(td, uap)
93 struct thread *td;
94 struct xenix_chsize_args *uap;
95{
96 struct ftruncate_args sa;
97
98 DPRINTF(("IBCS2: 'xenix chsize'\n"));
99 SCARG(&sa, fd) = SCARG(uap, fd);
100 SCARG(&sa, pad) = 0;
101 SCARG(&sa, length) = SCARG(uap, size);
99 sa.fd = uap->fd;
100 sa.pad = 0;
101 sa.length = uap->size;
102 return ftruncate(td, &sa);
103}
104
105
106int
107xenix_ftime(td, uap)
108 struct thread *td;
109 struct xenix_ftime_args *uap;

--- 8 unchanged lines hidden (view full) ---

118
119 DPRINTF(("IBCS2: 'xenix ftime'\n"));
120 microtime(&tv);
121 itb.time = tv.tv_sec;
122 itb.millitm = (tv.tv_usec / 1000);
123 itb.timezone = tz.tz_minuteswest;
124 itb.dstflag = tz.tz_dsttime != DST_NONE;
125
102 return ftruncate(td, &sa);
103}
104
105
106int
107xenix_ftime(td, uap)
108 struct thread *td;
109 struct xenix_ftime_args *uap;

--- 8 unchanged lines hidden (view full) ---

118
119 DPRINTF(("IBCS2: 'xenix ftime'\n"));
120 microtime(&tv);
121 itb.time = tv.tv_sec;
122 itb.millitm = (tv.tv_usec / 1000);
123 itb.timezone = tz.tz_minuteswest;
124 itb.dstflag = tz.tz_dsttime != DST_NONE;
125
126 return copyout((caddr_t)&itb, (caddr_t)SCARG(uap, tp),
126 return copyout((caddr_t)&itb, (caddr_t)uap->tp,
127 sizeof(struct ibcs2_timeb));
128}
129
130int
131xenix_nap(struct thread *td, struct xenix_nap_args *uap)
132{
133 long period;
134
127 sizeof(struct ibcs2_timeb));
128}
129
130int
131xenix_nap(struct thread *td, struct xenix_nap_args *uap)
132{
133 long period;
134
135 DPRINTF(("IBCS2: 'xenix nap %d ms'\n", SCARG(uap, millisec)));
136 period = (long)SCARG(uap, millisec) / (1000/hz);
135 DPRINTF(("IBCS2: 'xenix nap %d ms'\n", uap->millisec));
136 period = (long)uap->millisec / (1000/hz);
137 if (period)
138 while (tsleep(&period, PPAUSE, "nap", period)
139 != EWOULDBLOCK) ;
140 return 0;
141}
142
143int
144xenix_utsname(struct thread *td, struct xenix_utsname_args *uap)

--- 50 unchanged lines hidden (view full) ---

195xenix_eaccess(struct thread *td, struct xenix_eaccess_args *uap)
196{
197 struct ucred *cred = td->td_ucred;
198 struct vnode *vp;
199 struct nameidata nd;
200 int error, flags;
201 caddr_t sg = stackgap_init();
202
137 if (period)
138 while (tsleep(&period, PPAUSE, "nap", period)
139 != EWOULDBLOCK) ;
140 return 0;
141}
142
143int
144xenix_utsname(struct thread *td, struct xenix_utsname_args *uap)

--- 50 unchanged lines hidden (view full) ---

195xenix_eaccess(struct thread *td, struct xenix_eaccess_args *uap)
196{
197 struct ucred *cred = td->td_ucred;
198 struct vnode *vp;
199 struct nameidata nd;
200 int error, flags;
201 caddr_t sg = stackgap_init();
202
203 CHECKALTEXIST(td, &sg, SCARG(uap, path));
203 CHECKALTEXIST(td, &sg, uap->path);
204
205 NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF, UIO_USERSPACE,
204
205 NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF, UIO_USERSPACE,
206 SCARG(uap, path), td);
206 uap->path, td);
207 if ((error = namei(&nd)) != 0)
208 return error;
209 vp = nd.ni_vp;
210
211 /* Flags == 0 means only check for existence. */
207 if ((error = namei(&nd)) != 0)
208 return error;
209 vp = nd.ni_vp;
210
211 /* Flags == 0 means only check for existence. */
212 if (SCARG(uap, flags)) {
212 if (uap->flags) {
213 flags = 0;
213 flags = 0;
214 if (SCARG(uap, flags) & IBCS2_R_OK)
214 if (uap->flags & IBCS2_R_OK)
215 flags |= VREAD;
215 flags |= VREAD;
216 if (SCARG(uap, flags) & IBCS2_W_OK)
216 if (uap->flags & IBCS2_W_OK)
217 flags |= VWRITE;
217 flags |= VWRITE;
218 if (SCARG(uap, flags) & IBCS2_X_OK)
218 if (uap->flags & IBCS2_X_OK)
219 flags |= VEXEC;
220 if ((flags & VWRITE) == 0 || (error = vn_writechk(vp)) == 0)
221 error = VOP_ACCESS(vp, flags, cred, td);
222 }
223 NDFREE(&nd, NDF_ONLY_PNBUF);
224 vput(vp);
225 return error;
226}
219 flags |= VEXEC;
220 if ((flags & VWRITE) == 0 || (error = vn_writechk(vp)) == 0)
221 error = VOP_ACCESS(vp, flags, cred, td);
222 }
223 NDFREE(&nd, NDF_ONLY_PNBUF);
224 vput(vp);
225 return error;
226}