summaryrefslogtreecommitdiff
path: root/sys/compat
diff options
context:
space:
mode:
authorArtur Grabowski <art@cvs.openbsd.org>2001-09-21 15:32:00 +0000
committerArtur Grabowski <art@cvs.openbsd.org>2001-09-21 15:32:00 +0000
commitc1eef47904c1415710e20e2df959f0641ed6b319 (patch)
tree40c3665b50432a5d23e3e8cc430f0776a8368e8b /sys/compat
parent3010bd9840f459d47f875c7a319a2256a51030c5 (diff)
no need for own implemenation of p{read,write}{,v}
Diffstat (limited to 'sys/compat')
-rw-r--r--sys/compat/netbsd/files.netbsd3
-rw-r--r--sys/compat/netbsd/netbsd_pos_io.c433
-rw-r--r--sys/compat/netbsd/syscalls.master10
3 files changed, 6 insertions, 440 deletions
diff --git a/sys/compat/netbsd/files.netbsd b/sys/compat/netbsd/files.netbsd
index f13f817bdc5..1e15de7918b 100644
--- a/sys/compat/netbsd/files.netbsd
+++ b/sys/compat/netbsd/files.netbsd
@@ -1,4 +1,4 @@
-# $OpenBSD: files.netbsd,v 1.7 1999/11/10 15:55:22 mickey Exp $
+# $OpenBSD: files.netbsd,v 1.8 2001/09/21 15:31:59 art Exp $
#
# Config.new file description for machine-independent NetBSD compat code.
# Included by ports that need it.
@@ -11,7 +11,6 @@ file compat/netbsd/netbsd_file.c compat_netbsd
file compat/netbsd/netbsd_getcwd.c compat_netbsd
file compat/netbsd/netbsd_getdents.c compat_netbsd
file compat/netbsd/netbsd_misc.c compat_netbsd
-file compat/netbsd/netbsd_pos_io.c compat_netbsd
file compat/netbsd/netbsd_signal.c compat_netbsd
file compat/netbsd/netbsd_stat.c compat_netbsd
file compat/netbsd/netbsd_sysent.c compat_netbsd
diff --git a/sys/compat/netbsd/netbsd_pos_io.c b/sys/compat/netbsd/netbsd_pos_io.c
deleted file mode 100644
index 00def668211..00000000000
--- a/sys/compat/netbsd/netbsd_pos_io.c
+++ /dev/null
@@ -1,433 +0,0 @@
-/* $OpenBSD: netbsd_pos_io.c,v 1.7 2001/01/15 11:43:13 art Exp $ */
-
-/* $NetBSD: vfs_syscalls.c,v 1.71 1996/04/23 10:29:02 mycroft Exp $ */
-
-/*
- * Copyright (c) 1996 Theo de Raadt
- * Copyright (c) 1982, 1986, 1989, 1993
- * The Regents of the University of California. All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)vfs_syscalls.c 8.28 (Berkeley) 12/10/94
- * @(#)sys_generic.c 8.5 (Berkeley) 1/21/94
- */
-
-#include <sys/param.h>
-#include <sys/file.h>
-#include <sys/filedesc.h>
-#include <sys/vnode.h>
-#include <sys/proc.h>
-#include <sys/signalvar.h>
-#include <sys/uio.h>
-#include <sys/malloc.h>
-#ifdef KTRACE
-#include <sys/ktrace.h>
-#endif
-
-#include <compat/netbsd/netbsd_types.h>
-#include <compat/netbsd/netbsd_signal.h>
-#include <compat/netbsd/netbsd_syscallargs.h>
-
-static int netbsd_check_set_pos __P((struct proc *, int, off_t));
-/*
- * sys_lseek trimmed down
- */
-static int
-netbsd_check_set_pos(p, fd, offset)
- struct proc *p;
- int fd;
- off_t offset;
-{
- register struct filedesc *fdp = p->p_fd;
- register struct file *fp;
- struct vnode *vp;
- int special;
-
- if ((u_int)fd >= fdp->fd_nfiles ||
- (fp = fdp->fd_ofiles[fd]) == NULL)
- return (EBADF);
- if (fp->f_type != DTYPE_VNODE)
- return (ESPIPE);
- vp = (struct vnode *)fp->f_data;
- if (vp->v_type == VFIFO)
- return (ESPIPE);
- if (vp->v_type == VCHR)
- special = 1;
- else
- special = 0;
- if (!special && offset < 0)
- return (EINVAL);
- return (0);
-}
-
-/*
- * Positional read system call.
- */
-/* ARGSUSED */
-int
-netbsd_sys_pread(p, v, retval)
- struct proc *p;
- void *v;
- register_t *retval;
-{
- struct netbsd_sys_pread_args /* {
- syscallarg(int) fd;
- syscallarg(void *) buf;
- syscallarg(size_t) nbyte;
- syscallarg(off_t) offset;
- } */ *uap = v;
- register struct file *fp;
- register struct filedesc *fdp = p->p_fd;
- struct uio auio;
- struct iovec aiov;
- long cnt, error = 0;
- off_t offset;
-#ifdef KTRACE
- struct iovec ktriov;
-#endif
-
- /* Don't allow nbyte to be larger than max return val */
- if (SCARG(uap, nbyte) > SSIZE_MAX)
- return(EINVAL);
-
- offset = SCARG(uap, offset);
-
- if ((error = netbsd_check_set_pos(p, SCARG(uap, fd), offset)) != 0)
- return (error);
- fp = fdp->fd_ofiles[SCARG(uap, fd)];
- aiov.iov_base = (caddr_t)SCARG(uap, buf);
- aiov.iov_len = SCARG(uap, nbyte);
- auio.uio_iov = &aiov;
- auio.uio_iovcnt = 1;
- auio.uio_resid = SCARG(uap, nbyte);
- auio.uio_rw = UIO_READ;
- auio.uio_segflg = UIO_USERSPACE;
- auio.uio_procp = p;
-#ifdef KTRACE
- /*
- * if tracing, save a copy of iovec
- */
- if (KTRPOINT(p, KTR_GENIO))
- ktriov = aiov;
-#endif
- cnt = SCARG(uap, nbyte);
- error = (*fp->f_ops->fo_read)(fp, &offset, &auio, fp->f_cred);
- if (error)
- if (auio.uio_resid != cnt && (error == ERESTART ||
- error == EINTR || error == EWOULDBLOCK))
- error = 0;
- cnt -= auio.uio_resid;
-#ifdef KTRACE
- if (KTRPOINT(p, KTR_GENIO) && error == 0)
- ktrgenio(p, SCARG(uap, fd), UIO_READ, &ktriov,
- cnt, error);
-#endif
- *retval = cnt;
- return (error);
-}
-
-/*
- * Positional scatter read system call.
- */
-/* ARGSUSED */
-int
-netbsd_sys_preadv(p, v, retval)
- struct proc *p;
- void *v;
- register_t *retval;
-{
- struct netbsd_sys_preadv_args /* {
- syscallarg(int) fd;
- syscallarg(const struct iovec *) iovp;
- syscallarg(int) iovcnt;
- syscallarg(off_t) offset;
- } */ *uap = v;
- register struct file *fp;
- register struct filedesc *fdp = p->p_fd;
- struct uio auio;
- register struct iovec *iov;
- struct iovec *needfree;
- struct iovec aiov[UIO_SMALLIOV];
- long i, cnt, error = 0;
- u_int iovlen;
- off_t offset;
-#ifdef KTRACE
- struct iovec *ktriov = NULL;
-#endif
-
- if (SCARG(uap, iovcnt) <= 0)
- return (EINVAL);
-
- offset = SCARG(uap, offset);
-
- if ((error = netbsd_check_set_pos(p, SCARG(uap, fd), offset)) != 0)
- return (error);
- fp = fdp->fd_ofiles[SCARG(uap, fd)];
- /* note: can't use iovlen until iovcnt is validated */
- iovlen = SCARG(uap, iovcnt) * sizeof (struct iovec);
- if (SCARG(uap, iovcnt) > UIO_SMALLIOV) {
- if (SCARG(uap, iovcnt) > IOV_MAX) {
- return (EINVAL);
- }
- MALLOC(iov, struct iovec *, iovlen, M_IOV, M_WAITOK);
- needfree = iov;
- } else {
- iov = aiov;
- needfree = NULL;
- }
- auio.uio_iov = iov;
- auio.uio_iovcnt = SCARG(uap, iovcnt);
- auio.uio_rw = UIO_READ;
- auio.uio_segflg = UIO_USERSPACE;
- auio.uio_procp = p;
- error = copyin((caddr_t)SCARG(uap, iovp), (caddr_t)iov, iovlen);
- if (error)
- goto done;
- auio.uio_resid = 0;
- for (i = 0; i < SCARG(uap, iovcnt); i++, iov++) {
- /* Don't allow sum > SSIZE_MAX */
- if (iov->iov_len > SSIZE_MAX ||
- (auio.uio_resid += iov->iov_len) > SSIZE_MAX) {
- error = EINVAL;
- goto done;
- }
- }
-#ifdef KTRACE
- /*
- * if tracing, save a copy of iovec
- */
- if (KTRPOINT(p, KTR_GENIO)) {
- MALLOC(ktriov, struct iovec *, iovlen, M_TEMP, M_WAITOK);
- bcopy((caddr_t)auio.uio_iov, (caddr_t)ktriov, iovlen);
- }
-#endif
- cnt = auio.uio_resid;
- error = (*fp->f_ops->fo_read)(fp, &offset, &auio, fp->f_cred);
- if (error)
- if (auio.uio_resid != cnt && (error == ERESTART ||
- error == EINTR || error == EWOULDBLOCK))
- error = 0;
- cnt -= auio.uio_resid;
-#ifdef KTRACE
- if (ktriov != NULL) {
- if (error == 0)
- ktrgenio(p, SCARG(uap, fd), UIO_READ, ktriov,
- cnt, error);
- FREE(ktriov, M_TEMP);
- }
-#endif
- *retval = cnt;
-done:
- if (needfree)
- FREE(needfree, M_IOV);
- return (error);
-}
-
-/*
- * Positional write system call.
- */
-/* ARGSUSED */
-int
-netbsd_sys_pwrite(p, v, retval)
- struct proc *p;
- void *v;
- register_t *retval;
-{
- struct netbsd_sys_pwrite_args /* {
- syscallarg(int) fd;
- syscallarg(const void *) buf;
- syscallarg(size_t) nbyte;
- syscallarg(off_t) offset;
- } */ *uap = v;
- register struct file *fp;
- register struct filedesc *fdp = p->p_fd;
- struct uio auio;
- struct iovec aiov;
- long cnt, error = 0;
- off_t offset;
-#ifdef KTRACE
- struct iovec ktriov;
-#endif
-
- /* Don't allow nbyte to be larger than max return val */
- if (SCARG(uap, nbyte) > SSIZE_MAX)
- return(EINVAL);
-
- offset = SCARG(uap, offset);
-
- if ((error = netbsd_check_set_pos(p, SCARG(uap, fd), offset)) != 0)
- return (error);
- fp = fdp->fd_ofiles[SCARG(uap, fd)];
- if ((fp->f_flag & FWRITE) == 0)
- return (EBADF);
-
- aiov.iov_base = (caddr_t)SCARG(uap, buf);
- aiov.iov_len = SCARG(uap, nbyte);
- auio.uio_iov = &aiov;
- auio.uio_iovcnt = 1;
- auio.uio_resid = SCARG(uap, nbyte);
- auio.uio_rw = UIO_WRITE;
- auio.uio_segflg = UIO_USERSPACE;
- auio.uio_procp = p;
-#ifdef KTRACE
- /*
- * if tracing, save a copy of iovec
- */
- if (KTRPOINT(p, KTR_GENIO))
- ktriov = aiov;
-#endif
- cnt = SCARG(uap, nbyte);
- error = (*fp->f_ops->fo_write)(fp, &offset, &auio, fp->f_cred);
- if (error) {
- if (auio.uio_resid != cnt && (error == ERESTART ||
- error == EINTR || error == EWOULDBLOCK))
- error = 0;
- if (error == EPIPE)
- psignal(p, SIGPIPE);
- }
- cnt -= auio.uio_resid;
-#ifdef KTRACE
- if (KTRPOINT(p, KTR_GENIO) && error == 0)
- ktrgenio(p, SCARG(uap, fd), UIO_WRITE,
- &ktriov, cnt, error);
-#endif
- *retval = cnt;
- return (error);
-}
-
-/*
- * Positional gather write system call.
- */
-/* ARGSUSED */
-int
-netbsd_sys_pwritev(p, v, retval)
- struct proc *p;
- void *v;
- register_t *retval;
-{
- struct netbsd_sys_pwritev_args /* {
- syscallarg(int) fd;
- syscallarg(const struct iovec *) iovp;
- syscallarg(int) iovcnt;
- syscallarg(off_t) offset;
- } */ *uap = v;
- register struct file *fp;
- register struct filedesc *fdp = p->p_fd;
- struct uio auio;
- register struct iovec *iov;
- struct iovec *needfree;
- struct iovec aiov[UIO_SMALLIOV];
- long i, cnt, error = 0;
- u_int iovlen;
- off_t offset;
-#ifdef KTRACE
- struct iovec *ktriov = NULL;
-#endif
-
- if (SCARG(uap, iovcnt) <= 0)
- return (EINVAL);
-
- offset = SCARG(uap, offset);
-
- if ((error = netbsd_check_set_pos(p, SCARG(uap, fd), offset)) != 0)
- return (error);
- fp = fdp->fd_ofiles[SCARG(uap, fd)];
- if ((fp->f_flag & FWRITE) == 0) {
- error = EBADF;
- goto done;
- }
- /* note: can't use iovlen until iovcnt is validated */
- iovlen = SCARG(uap, iovcnt) * sizeof (struct iovec);
- if (SCARG(uap, iovcnt) > UIO_SMALLIOV) {
- if (SCARG(uap, iovcnt) > IOV_MAX) {
- error = EINVAL;
- goto done;
- }
- MALLOC(iov, struct iovec *, iovlen, M_IOV, M_WAITOK);
- needfree = iov;
- } else {
- iov = aiov;
- needfree = NULL;
- }
- auio.uio_iov = iov;
- auio.uio_iovcnt = SCARG(uap, iovcnt);
- auio.uio_rw = UIO_WRITE;
- auio.uio_segflg = UIO_USERSPACE;
- auio.uio_procp = p;
- error = copyin((caddr_t)SCARG(uap, iovp), (caddr_t)iov, iovlen);
- if (error)
- goto done;
- auio.uio_resid = 0;
- for (i = 0; i < SCARG(uap, iovcnt); i++, iov++) {
- /* Don't allow sum > SSIZE_MAX */
- if (iov->iov_len > SSIZE_MAX ||
- (auio.uio_resid += iov->iov_len) > SSIZE_MAX) {
- error = EINVAL;
- goto done;
- }
- }
-#ifdef KTRACE
- /*
- * if tracing, save a copy of iovec
- */
- if (KTRPOINT(p, KTR_GENIO)) {
- MALLOC(ktriov, struct iovec *, iovlen, M_TEMP, M_WAITOK);
- bcopy((caddr_t)auio.uio_iov, (caddr_t)ktriov, iovlen);
- }
-#endif
- cnt = auio.uio_resid;
- error = (*fp->f_ops->fo_write)(fp, &offset, &auio, fp->f_cred);
- if (error) {
- if (auio.uio_resid != cnt && (error == ERESTART ||
- error == EINTR || error == EWOULDBLOCK))
- error = 0;
- if (error == EPIPE)
- psignal(p, SIGPIPE);
- }
- cnt -= auio.uio_resid;
-#ifdef KTRACE
- if (ktriov != NULL) {
- if (error == 0)
- ktrgenio(p, SCARG(uap, fd), UIO_WRITE,
- ktriov, cnt, error);
- FREE(ktriov, M_TEMP);
- }
-#endif
- *retval = cnt;
-done:
- if (needfree)
- FREE(needfree, M_IOV);
- return (error);
-}
diff --git a/sys/compat/netbsd/syscalls.master b/sys/compat/netbsd/syscalls.master
index 6bd6abdd804..abcd8685088 100644
--- a/sys/compat/netbsd/syscalls.master
+++ b/sys/compat/netbsd/syscalls.master
@@ -1,4 +1,4 @@
-; $OpenBSD: syscalls.master,v 1.14 2001/09/05 23:41:45 art Exp $
+; $OpenBSD: syscalls.master,v 1.15 2001/09/21 15:31:59 art Exp $
; @(#)syscalls.master 8.2 (Berkeley) 1/13/94
@@ -364,9 +364,9 @@
171 UNIMPL 1.0 shmsys
#endif
172 UNIMPL
-173 STD { ssize_t netbsd_sys_pread(int fd, void *buf, \
+173 NOARGS { ssize_t sys_pread(int fd, void *buf, \
size_t nbyte, int pad, off_t offset); }
-174 STD { ssize_t netbsd_sys_pwrite(int fd, const void *buf, \
+174 NOARGS { ssize_t sys_pwrite(int fd, const void *buf, \
size_t nbyte, int pad, off_t offset); }
#ifdef NTP
175 NOARGS { int sys_ntp_gettime(struct ntptimeval *ntvp); }
@@ -589,10 +589,10 @@
#else
288 UNIMPL
#endif
-289 STD { ssize_t netbsd_sys_preadv(int fd, \
+289 NOARGS { ssize_t sys_preadv(int fd, \
const struct iovec *iovp, int iovcnt, \
int pad, off_t offset); }
-290 STD { ssize_t netbsd_sys_pwritev(int fd, \
+290 NOARGS { ssize_t sys_pwritev(int fd, \
const struct iovec *iovp, int iovcnt, \
int pad, off_t offset); }
291 STD { int netbsd_sys___sigaction14(int signum, \