summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/kern/sys_generic.c218
-rw-r--r--sys/kern/sys_pipe.c12
-rw-r--r--sys/kern/sys_socket.c8
-rw-r--r--sys/kern/syscalls.master8
-rw-r--r--sys/kern/vfs_aio.c10
-rw-r--r--sys/kern/vfs_vnops.c16
-rw-r--r--sys/sys/file.h7
-rw-r--r--sys/sys/socketvar.h8
8 files changed, 129 insertions, 158 deletions
diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c
index e19fed8..2a81043 100644
--- a/sys/kern/sys_generic.c
+++ b/sys/kern/sys_generic.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)sys_generic.c 8.5 (Berkeley) 1/21/94
- * $Id: sys_generic.c,v 1.45 1999/01/29 08:10:35 bde Exp $
+ * $Id: sys_generic.c,v 1.46 1999/03/27 21:16:33 alc Exp $
*/
#include "opt_ktrace.h"
@@ -69,6 +69,25 @@ MALLOC_DEFINE(M_IOV, "iov", "large iov's");
static int pollscan __P((struct proc *, struct pollfd *, int));
static int selscan __P((struct proc *, fd_mask **, fd_mask **, int));
+static struct file* getfp __P((struct filedesc *, int, int));
+static int dofileread __P((struct proc *, struct file *, int, void *,
+ size_t, off_t, int));
+static int dofilewrite __P((struct proc *, struct file *, int,
+ const void *, size_t, off_t, int));
+
+static struct file*
+getfp(fdp, fd, flag)
+ struct filedesc* fdp;
+ int fd, flag;
+{
+ struct file* fp;
+
+ if (((u_int)fd) >= fdp->fd_nfiles ||
+ (fp = fdp->fd_ofiles[fd]) == NULL ||
+ (fp->f_flag & flag) == 0)
+ return (NULL);
+ return (fp);
+}
/*
* Read system call.
@@ -80,76 +99,57 @@ struct read_args {
size_t nbyte;
};
#endif
-/* ARGSUSED */
int
read(p, uap)
struct proc *p;
register struct read_args *uap;
{
register struct file *fp;
- register struct filedesc *fdp = p->p_fd;
- struct uio auio;
- struct iovec aiov;
- long cnt, error = 0;
-#ifdef KTRACE
- struct iovec ktriov;
-#endif
- if (((u_int)uap->fd) >= fdp->fd_nfiles ||
- (fp = fdp->fd_ofiles[uap->fd]) == NULL ||
- (fp->f_flag & FREAD) == 0)
+ if ((fp = getfp(p->p_fd, uap->fd, FREAD)) == NULL)
return (EBADF);
- aiov.iov_base = (caddr_t)uap->buf;
- aiov.iov_len = uap->nbyte;
- auio.uio_iov = &aiov;
- auio.uio_iovcnt = 1;
- auio.uio_offset = -1;
- if (uap->nbyte > INT_MAX)
- return (EINVAL);
- auio.uio_resid = 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 = uap->nbyte;
- if ((error = (*fp->f_ops->fo_read)(fp, &auio, fp->f_cred)))
- 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->p_tracep, uap->fd, UIO_READ, &ktriov, cnt, error);
-#endif
- p->p_retval[0] = cnt;
- return (error);
+ return (dofileread(p, fp, uap->fd, uap->buf, uap->nbyte, (off_t)-1, 0));
}
/*
- * pread system call.
+ * Pread system call
*/
#ifndef _SYS_SYSPROTO_H_
struct pread_args {
int fd;
void *buf;
size_t nbyte;
- off_t offset;
+ int pad;
+ off_t offset;
};
#endif
-/* ARGSUSED */
int
pread(p, uap)
struct proc *p;
register struct pread_args *uap;
{
register struct file *fp;
- register struct filedesc *fdp = p->p_fd;
+
+ if ((fp = getfp(p->p_fd, uap->fd, FREAD)) == NULL)
+ return (EBADF);
+ if (fp->f_type != DTYPE_VNODE)
+ return (ESPIPE);
+ return (dofileread(p, fp, uap->fd, uap->buf, uap->nbyte, uap->offset,
+ FOF_OFFSET));
+}
+
+/*
+ * Code common for read and pread
+ */
+int
+dofileread(p, fp, fd, buf, nbyte, offset, flags)
+ struct proc *p;
+ struct file *fp;
+ int fd, flags;
+ void *buf;
+ size_t nbyte;
+ off_t offset;
+{
struct uio auio;
struct iovec aiov;
long cnt, error = 0;
@@ -157,20 +157,14 @@ pread(p, uap)
struct iovec ktriov;
#endif
- if (((u_int)uap->fd) >= fdp->fd_nfiles ||
- (fp = fdp->fd_ofiles[uap->fd]) == NULL ||
- (fp->f_flag & FREAD) == 0)
- return (EBADF);
- if (fp->f_type != DTYPE_VNODE)
- return (ESPIPE);
- aiov.iov_base = (caddr_t)uap->buf;
- aiov.iov_len = uap->nbyte;
+ aiov.iov_base = (caddr_t)buf;
+ aiov.iov_len = nbyte;
auio.uio_iov = &aiov;
auio.uio_iovcnt = 1;
- auio.uio_offset = uap->offset;
- if (uap->nbyte > INT_MAX)
+ auio.uio_offset = offset;
+ if (nbyte > INT_MAX)
return (EINVAL);
- auio.uio_resid = uap->nbyte;
+ auio.uio_resid = nbyte;
auio.uio_rw = UIO_READ;
auio.uio_segflg = UIO_USERSPACE;
auio.uio_procp = p;
@@ -181,15 +175,15 @@ pread(p, uap)
if (KTRPOINT(p, KTR_GENIO))
ktriov = aiov;
#endif
- cnt = uap->nbyte;
- if ((error = (*fp->f_ops->fo_read)(fp, &auio, fp->f_cred)))
+ cnt = nbyte;
+ if ((error = (*fp->f_ops->fo_read)(fp, &auio, fp->f_cred, flags)))
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->p_tracep, uap->fd, UIO_READ, &ktriov, cnt, error);
+ ktrgenio(p->p_tracep, fd, UIO_READ, &ktriov, cnt, error);
#endif
p->p_retval[0] = cnt;
return (error);
@@ -222,9 +216,7 @@ readv(p, uap)
struct iovec *ktriov = NULL;
#endif
- if (((u_int)uap->fd) >= fdp->fd_nfiles ||
- (fp = fdp->fd_ofiles[uap->fd]) == NULL ||
- (fp->f_flag & FREAD) == 0)
+ if ((fp = getfp(fdp, uap->fd, FREAD)) == NULL)
return (EBADF);
/* note: can't use iovlen until iovcnt is validated */
iovlen = uap->iovcnt * sizeof (struct iovec);
@@ -264,7 +256,7 @@ readv(p, uap)
}
#endif
cnt = auio.uio_resid;
- if ((error = (*fp->f_ops->fo_read)(fp, &auio, fp->f_cred)))
+ if ((error = (*fp->f_ops->fo_read)(fp, &auio, fp->f_cred, 0)))
if (auio.uio_resid != cnt && (error == ERESTART ||
error == EINTR || error == EWOULDBLOCK))
error = 0;
@@ -300,63 +292,22 @@ write(p, uap)
register struct write_args *uap;
{
register struct file *fp;
- register struct filedesc *fdp = p->p_fd;
- struct uio auio;
- struct iovec aiov;
- long cnt, error = 0;
-#ifdef KTRACE
- struct iovec ktriov;
-#endif
- if (((u_int)uap->fd) >= fdp->fd_nfiles ||
- (fp = fdp->fd_ofiles[uap->fd]) == NULL ||
- (fp->f_flag & FWRITE) == 0)
+ if ((fp = getfp(p->p_fd, uap->fd, FWRITE)) == NULL)
return (EBADF);
- aiov.iov_base = uap->buf;
- aiov.iov_len = uap->nbyte;
- auio.uio_iov = &aiov;
- auio.uio_iovcnt = 1;
- auio.uio_offset = -1;
- if (uap->nbyte > INT_MAX)
- return (EINVAL);
- auio.uio_resid = 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 = uap->nbyte;
- if ((error = (*fp->f_ops->fo_write)(fp, &auio, fp->f_cred))) {
- 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->p_tracep, uap->fd, UIO_WRITE,
- &ktriov, cnt, error);
-#endif
- p->p_retval[0] = cnt;
- return (error);
+ return (dofilewrite(p, fp, uap->fd, uap->buf, uap->nbyte, (off_t)-1, 0));
}
/*
- * pwrite system call
+ * Pwrite system call
*/
#ifndef _SYS_SYSPROTO_H_
struct pwrite_args {
int fd;
const void *buf;
size_t nbyte;
- off_t offset;
+ int pad;
+ off_t offset;
};
#endif
int
@@ -365,7 +316,24 @@ pwrite(p, uap)
register struct pwrite_args *uap;
{
register struct file *fp;
- register struct filedesc *fdp = p->p_fd;
+
+ if ((fp = getfp(p->p_fd, uap->fd, FWRITE)) == NULL)
+ return (EBADF);
+ if (fp->f_type != DTYPE_VNODE)
+ return (ESPIPE);
+ return (dofilewrite(p, fp, uap->fd, uap->buf, uap->nbyte, uap->offset,
+ FOF_OFFSET));
+}
+
+static int
+dofilewrite(p, fp, fd, buf, nbyte, offset, flags)
+ struct proc *p;
+ struct file *fp;
+ int fd, flags;
+ const void *buf;
+ size_t nbyte;
+ off_t offset;
+{
struct uio auio;
struct iovec aiov;
long cnt, error = 0;
@@ -373,20 +341,14 @@ pwrite(p, uap)
struct iovec ktriov;
#endif
- if (((u_int)uap->fd) >= fdp->fd_nfiles ||
- (fp = fdp->fd_ofiles[uap->fd]) == NULL ||
- (fp->f_flag & FWRITE) == 0)
- return (EBADF);
- if (fp->f_type != DTYPE_VNODE)
- return (ESPIPE);
- aiov.iov_base = (caddr_t)uap->buf;
- aiov.iov_len = uap->nbyte;
+ aiov.iov_base = (void *)buf;
+ aiov.iov_len = nbyte;
auio.uio_iov = &aiov;
auio.uio_iovcnt = 1;
- auio.uio_offset = uap->offset;
- if (uap->nbyte > INT_MAX)
+ auio.uio_offset = offset;
+ if (nbyte > INT_MAX)
return (EINVAL);
- auio.uio_resid = uap->nbyte;
+ auio.uio_resid = nbyte;
auio.uio_rw = UIO_WRITE;
auio.uio_segflg = UIO_USERSPACE;
auio.uio_procp = p;
@@ -397,8 +359,8 @@ pwrite(p, uap)
if (KTRPOINT(p, KTR_GENIO))
ktriov = aiov;
#endif
- cnt = uap->nbyte;
- if ((error = (*fp->f_ops->fo_write)(fp, &auio, fp->f_cred))) {
+ cnt = nbyte;
+ if ((error = (*fp->f_ops->fo_write)(fp, &auio, fp->f_cred, flags))) {
if (auio.uio_resid != cnt && (error == ERESTART ||
error == EINTR || error == EWOULDBLOCK))
error = 0;
@@ -408,7 +370,7 @@ pwrite(p, uap)
cnt -= auio.uio_resid;
#ifdef KTRACE
if (KTRPOINT(p, KTR_GENIO) && error == 0)
- ktrgenio(p->p_tracep, uap->fd, UIO_WRITE,
+ ktrgenio(p->p_tracep, fd, UIO_WRITE,
&ktriov, cnt, error);
#endif
p->p_retval[0] = cnt;
@@ -442,9 +404,7 @@ writev(p, uap)
struct iovec *ktriov = NULL;
#endif
- if (((u_int)uap->fd) >= fdp->fd_nfiles ||
- (fp = fdp->fd_ofiles[uap->fd]) == NULL ||
- (fp->f_flag & FWRITE) == 0)
+ if ((fp = getfp(fdp, uap->fd, FWRITE)) == NULL)
return (EBADF);
/* note: can't use iovlen until iovcnt is validated */
iovlen = uap->iovcnt * sizeof (struct iovec);
@@ -484,7 +444,7 @@ writev(p, uap)
}
#endif
cnt = auio.uio_resid;
- if ((error = (*fp->f_ops->fo_write)(fp, &auio, fp->f_cred))) {
+ if ((error = (*fp->f_ops->fo_write)(fp, &auio, fp->f_cred, 0))) {
if (auio.uio_resid != cnt && (error == ERESTART ||
error == EINTR || error == EWOULDBLOCK))
error = 0;
diff --git a/sys/kern/sys_pipe.c b/sys/kern/sys_pipe.c
index 396538a..cb1cd30 100644
--- a/sys/kern/sys_pipe.c
+++ b/sys/kern/sys_pipe.c
@@ -16,7 +16,7 @@
* 4. Modifications may be freely made to this file if the above conditions
* are met.
*
- * $Id: sys_pipe.c,v 1.49 1999/01/28 00:57:47 dillon Exp $
+ * $Id: sys_pipe.c,v 1.50 1999/02/04 23:50:49 dillon Exp $
*/
/*
@@ -88,9 +88,9 @@
* interfaces to the outside world
*/
static int pipe_read __P((struct file *fp, struct uio *uio,
- struct ucred *cred));
+ struct ucred *cred, int flags));
static int pipe_write __P((struct file *fp, struct uio *uio,
- struct ucred *cred));
+ struct ucred *cred, int flags));
static int pipe_close __P((struct file *fp, struct proc *p));
static int pipe_poll __P((struct file *fp, int events, struct ucred *cred,
struct proc *p));
@@ -319,10 +319,11 @@ pipeselwakeup(cpipe)
/* ARGSUSED */
static int
-pipe_read(fp, uio, cred)
+pipe_read(fp, uio, cred, flags)
struct file *fp;
struct uio *uio;
struct ucred *cred;
+ int flags;
{
struct pipe *rpipe = (struct pipe *) fp->f_data;
@@ -702,10 +703,11 @@ error1:
#endif
static int
-pipe_write(fp, uio, cred)
+pipe_write(fp, uio, cred, flags)
struct file *fp;
struct uio *uio;
struct ucred *cred;
+ int flags;
{
int error = 0;
int orig_resid;
diff --git a/sys/kern/sys_socket.c b/sys/kern/sys_socket.c
index f72f8a7..ad92d87 100644
--- a/sys/kern/sys_socket.c
+++ b/sys/kern/sys_socket.c
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)sys_socket.c 8.1 (Berkeley) 6/10/93
- * $Id: sys_socket.c,v 1.22 1999/02/01 13:24:39 newton Exp $
+ * $Id: sys_socket.c,v 1.23 1999/02/01 21:16:29 newton Exp $
*/
#include <sys/param.h>
@@ -54,10 +54,11 @@ struct fileops socketops =
/* ARGSUSED */
int
-soo_read(fp, uio, cred)
+soo_read(fp, uio, cred, flags)
struct file *fp;
struct uio *uio;
struct ucred *cred;
+ int flags;
{
struct socket *so = (struct socket *)fp->f_data;
return so->so_proto->pr_usrreqs->pru_soreceive(so, 0, uio, 0, 0, 0);
@@ -65,10 +66,11 @@ soo_read(fp, uio, cred)
/* ARGSUSED */
int
-soo_write(fp, uio, cred)
+soo_write(fp, uio, cred, flags)
struct file *fp;
struct uio *uio;
struct ucred *cred;
+ int flags;
{
struct socket *so = (struct socket *)fp->f_data;
return so->so_proto->pr_usrreqs->pru_sosend(so, 0, uio, 0, 0, 0,
diff --git a/sys/kern/syscalls.master b/sys/kern/syscalls.master
index 30b39c4..899a105 100644
--- a/sys/kern/syscalls.master
+++ b/sys/kern/syscalls.master
@@ -1,4 +1,4 @@
- $Id: syscalls.master,v 1.55 1998/11/11 12:45:14 peter Exp $
+ $Id: syscalls.master,v 1.56 1999/03/27 21:16:33 alc Exp $
; from: @(#)syscalls.master 8.2 (Berkeley) 1/13/94
;
; System call name/number master file.
@@ -266,8 +266,10 @@
171 STD BSD { int shmsys(int which, int a2, int a3, int a4); }
; XXX should be { int shmsys(int which, ...); }
172 UNIMPL NOHIDE nosys
-173 STD POSIX { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }
-174 STD POSIX { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }
+173 STD POSIX { ssize_t pread(int fd, void *buf, size_t nbyte, \
+ int pad, off_t offset); }
+174 STD POSIX { ssize_t pwrite(int fd, const void *buf, \
+ size_t nbyte, int pad, off_t offset); }
175 UNIMPL NOHIDE nosys
176 STD BSD { int ntp_adjtime(struct timex *tp); }
177 UNIMPL NOHIDE sfork (BSD/OS 2.x)
diff --git a/sys/kern/vfs_aio.c b/sys/kern/vfs_aio.c
index 96a3cb3..0c4f448 100644
--- a/sys/kern/vfs_aio.c
+++ b/sys/kern/vfs_aio.c
@@ -13,7 +13,7 @@
* bad that happens because of using this software isn't the responsibility
* of the author. This software is distributed AS-IS.
*
- * $Id: vfs_aio.c,v 1.43 1999/02/19 14:25:35 luoqi Exp $
+ * $Id: vfs_aio.c,v 1.44 1999/02/25 15:54:06 bde Exp $
*/
/*
@@ -570,10 +570,10 @@ aio_process(struct aiocblist *aiocbe)
oublock_st = mycp->p_stats->p_ru.ru_oublock;
if (cb->aio_lio_opcode == LIO_READ) {
auio.uio_rw = UIO_READ;
- error = (*fp->f_ops->fo_read)(fp, &auio, fp->f_cred);
+ error = (*fp->f_ops->fo_read)(fp, &auio, fp->f_cred, FOF_OFFSET);
} else {
auio.uio_rw = UIO_WRITE;
- error = (*fp->f_ops->fo_write)(fp, &auio, fp->f_cred);
+ error = (*fp->f_ops->fo_write)(fp, &auio, fp->f_cred, FOF_OFFSET);
}
inblock_end = mycp->p_stats->p_ru.ru_inblock;
oublock_end = mycp->p_stats->p_ru.ru_oublock;
@@ -1709,7 +1709,7 @@ aio_read(struct proc *p, struct aio_read_args *uap)
auio.uio_procp = p;
cnt = iocb.aio_nbytes;
- error = (*fp->f_ops->fo_read)(fp, &auio, fp->f_cred);
+ error = (*fp->f_ops->fo_read)(fp, &auio, fp->f_cred, FOF_OFFSET);
if (error &&
(auio.uio_resid != cnt) &&
(error == ERESTART || error == EINTR || error == EWOULDBLOCK))
@@ -1775,7 +1775,7 @@ aio_write(struct proc *p, struct aio_write_args *uap)
auio.uio_procp = p;
cnt = iocb.aio_nbytes;
- error = (*fp->f_ops->fo_write)(fp, &auio, fp->f_cred);
+ error = (*fp->f_ops->fo_write)(fp, &auio, fp->f_cred, FOF_OFFSET);
if (error) {
if (auio.uio_resid != cnt) {
if (error == ERESTART || error == EINTR || error == EWOULDBLOCK)
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index 708c388d..cd7921c 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)vfs_vnops.c 8.2 (Berkeley) 1/21/94
- * $Id: vfs_vnops.c,v 1.63 1999/01/30 12:21:49 phk Exp $
+ * $Id: vfs_vnops.c,v 1.64 1999/03/26 20:25:21 alc Exp $
*/
#include <sys/param.h>
@@ -55,11 +55,11 @@ static int vn_closefile __P((struct file *fp, struct proc *p));
static int vn_ioctl __P((struct file *fp, u_long com, caddr_t data,
struct proc *p));
static int vn_read __P((struct file *fp, struct uio *uio,
- struct ucred *cred));
+ struct ucred *cred, int flags));
static int vn_poll __P((struct file *fp, int events, struct ucred *cred,
struct proc *p));
static int vn_write __P((struct file *fp, struct uio *uio,
- struct ucred *cred));
+ struct ucred *cred, int flags));
struct fileops vnops =
{ vn_read, vn_write, vn_ioctl, vn_poll, vn_closefile };
@@ -272,10 +272,11 @@ vn_rdwr(rw, vp, base, len, offset, segflg, ioflg, cred, aresid, p)
* File table vnode read routine.
*/
static int
-vn_read(fp, uio, cred)
+vn_read(fp, uio, cred, flags)
struct file *fp;
struct uio *uio;
struct ucred *cred;
+ int flags;
{
struct vnode *vp = (struct vnode *)fp->f_data;
struct proc *p = uio->uio_procp;
@@ -289,7 +290,7 @@ vn_read(fp, uio, cred)
if (fp->f_flag & FNONBLOCK)
flag |= IO_NDELAY;
- if (uio->uio_offset != -1) {
+ if (flags & FOF_OFFSET) {
error = VOP_READ(vp, uio, flag, cred);
goto out;
}
@@ -335,10 +336,11 @@ out:
* File table vnode write routine.
*/
static int
-vn_write(fp, uio, cred)
+vn_write(fp, uio, cred, flags)
struct file *fp;
struct uio *uio;
struct ucred *cred;
+ int flags;
{
struct vnode *vp = (struct vnode *)fp->f_data;
struct proc *p = uio->uio_procp;
@@ -353,7 +355,7 @@ vn_write(fp, uio, cred)
ioflag |= IO_SYNC;
VOP_LEASE(vp, p, cred, LEASE_WRITE);
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
- if (uio->uio_offset != -1) {
+ if (flags & FOF_OFFSET) {
error = VOP_WRITE(vp, uio, ioflag, cred);
goto out;
}
diff --git a/sys/sys/file.h b/sys/sys/file.h
index 687c22b..005240f 100644
--- a/sys/sys/file.h
+++ b/sys/sys/file.h
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)file.h 8.3 (Berkeley) 1/9/95
- * $Id: file.h,v 1.15 1997/11/23 10:43:36 bde Exp $
+ * $Id: file.h,v 1.16 1998/06/07 17:12:58 dfr Exp $
*/
#ifndef _SYS_FILE_H_
@@ -65,9 +65,10 @@ struct file {
struct ucred *f_cred; /* credentials associated with descriptor */
struct fileops {
int (*fo_read) __P((struct file *fp, struct uio *uio,
- struct ucred *cred));
+ struct ucred *cred, int flags));
int (*fo_write) __P((struct file *fp, struct uio *uio,
- struct ucred *cred));
+ struct ucred *cred, int flags));
+#define FOF_OFFSET 1
int (*fo_ioctl) __P((struct file *fp, u_long com,
caddr_t data, struct proc *p));
int (*fo_poll) __P((struct file *fp, int events,
diff --git a/sys/sys/socketvar.h b/sys/sys/socketvar.h
index 9aef175..6257eb9 100644
--- a/sys/sys/socketvar.h
+++ b/sys/sys/socketvar.h
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)socketvar.h 8.3 (Berkeley) 2/19/95
- * $Id: socketvar.h,v 1.35 1999/01/31 09:40:14 bde Exp $
+ * $Id: socketvar.h,v 1.36 1999/02/01 21:16:31 newton Exp $
*/
#ifndef _SYS_SOCKETVAR_H_
@@ -287,8 +287,10 @@ struct uio;
/*
* File operations on sockets.
*/
-int soo_read __P((struct file *fp, struct uio *uio, struct ucred *cred));
-int soo_write __P((struct file *fp, struct uio *uio, struct ucred *cred));
+int soo_read __P((struct file *fp, struct uio *uio, struct ucred *cred,
+ int flags));
+int soo_write __P((struct file *fp, struct uio *uio, struct ucred *cred,
+ int flags));
int soo_close __P((struct file *fp, struct proc *p));
int soo_ioctl __P((struct file *fp, u_long cmd, caddr_t data,
struct proc *p));
OpenPOWER on IntegriCloud