From 930730fda4a84d270ddd788e2c31846b66b96054 Mon Sep 17 00:00:00 2001 From: Kirk McKusick Date: Wed, 7 Mar 1990 07:28:13 -0800 Subject: [PATCH] readdir now returns an eof indication SCCS-vsn: sys/ufs/ffs/ffs_vnops.c 7.33 SCCS-vsn: sys/ufs/ffs/ufs_vnops.c 7.33 SCCS-vsn: sys/ufs/lfs/lfs_vnops.c 7.33 SCCS-vsn: sys/ufs/ufs/ufs_vnops.c 7.33 --- usr/src/sys/ufs/ffs/ffs_vnops.c | 9 +++++++-- usr/src/sys/ufs/ffs/ufs_vnops.c | 9 +++++++-- usr/src/sys/ufs/lfs/lfs_vnops.c | 9 +++++++-- usr/src/sys/ufs/ufs/ufs_vnops.c | 9 +++++++-- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/usr/src/sys/ufs/ffs/ffs_vnops.c b/usr/src/sys/ufs/ffs/ffs_vnops.c index 1e17c735e8..d5d5bad63b 100644 --- a/usr/src/sys/ufs/ffs/ffs_vnops.c +++ b/usr/src/sys/ufs/ffs/ffs_vnops.c @@ -14,7 +14,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * @(#)ffs_vnops.c 7.32 (Berkeley) %G% + * @(#)ffs_vnops.c 7.33 (Berkeley) %G% */ #include "param.h" @@ -1245,10 +1245,11 @@ ufs_symlink(ndp, vap, target) /* * Vnode op for read and write */ -ufs_readdir(vp, uio, cred) +ufs_readdir(vp, uio, cred, eofflagp) struct vnode *vp; register struct uio *uio; struct ucred *cred; + int *eofflagp; { int count, lost, error; @@ -1261,6 +1262,10 @@ ufs_readdir(vp, uio, cred) uio->uio_iov->iov_len = count; error = ufs_read(vp, uio, 0, cred); uio->uio_resid += lost; + if ((VTOI(vp)->i_size - uio->uio_offset) <= 0) + *eofflagp = 1; + else + *eofflagp = 0; return (error); } diff --git a/usr/src/sys/ufs/ffs/ufs_vnops.c b/usr/src/sys/ufs/ffs/ufs_vnops.c index 3a72845e89..3778eb892f 100644 --- a/usr/src/sys/ufs/ffs/ufs_vnops.c +++ b/usr/src/sys/ufs/ffs/ufs_vnops.c @@ -14,7 +14,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * @(#)ufs_vnops.c 7.32 (Berkeley) %G% + * @(#)ufs_vnops.c 7.33 (Berkeley) %G% */ #include "param.h" @@ -1245,10 +1245,11 @@ ufs_symlink(ndp, vap, target) /* * Vnode op for read and write */ -ufs_readdir(vp, uio, cred) +ufs_readdir(vp, uio, cred, eofflagp) struct vnode *vp; register struct uio *uio; struct ucred *cred; + int *eofflagp; { int count, lost, error; @@ -1261,6 +1262,10 @@ ufs_readdir(vp, uio, cred) uio->uio_iov->iov_len = count; error = ufs_read(vp, uio, 0, cred); uio->uio_resid += lost; + if ((VTOI(vp)->i_size - uio->uio_offset) <= 0) + *eofflagp = 1; + else + *eofflagp = 0; return (error); } diff --git a/usr/src/sys/ufs/lfs/lfs_vnops.c b/usr/src/sys/ufs/lfs/lfs_vnops.c index d1b7183264..f434a61ae6 100644 --- a/usr/src/sys/ufs/lfs/lfs_vnops.c +++ b/usr/src/sys/ufs/lfs/lfs_vnops.c @@ -14,7 +14,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * @(#)lfs_vnops.c 7.32 (Berkeley) %G% + * @(#)lfs_vnops.c 7.33 (Berkeley) %G% */ #include "param.h" @@ -1245,10 +1245,11 @@ ufs_symlink(ndp, vap, target) /* * Vnode op for read and write */ -ufs_readdir(vp, uio, cred) +ufs_readdir(vp, uio, cred, eofflagp) struct vnode *vp; register struct uio *uio; struct ucred *cred; + int *eofflagp; { int count, lost, error; @@ -1261,6 +1262,10 @@ ufs_readdir(vp, uio, cred) uio->uio_iov->iov_len = count; error = ufs_read(vp, uio, 0, cred); uio->uio_resid += lost; + if ((VTOI(vp)->i_size - uio->uio_offset) <= 0) + *eofflagp = 1; + else + *eofflagp = 0; return (error); } diff --git a/usr/src/sys/ufs/ufs/ufs_vnops.c b/usr/src/sys/ufs/ufs/ufs_vnops.c index 3a72845e89..3778eb892f 100644 --- a/usr/src/sys/ufs/ufs/ufs_vnops.c +++ b/usr/src/sys/ufs/ufs/ufs_vnops.c @@ -14,7 +14,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * @(#)ufs_vnops.c 7.32 (Berkeley) %G% + * @(#)ufs_vnops.c 7.33 (Berkeley) %G% */ #include "param.h" @@ -1245,10 +1245,11 @@ ufs_symlink(ndp, vap, target) /* * Vnode op for read and write */ -ufs_readdir(vp, uio, cred) +ufs_readdir(vp, uio, cred, eofflagp) struct vnode *vp; register struct uio *uio; struct ucred *cred; + int *eofflagp; { int count, lost, error; @@ -1261,6 +1262,10 @@ ufs_readdir(vp, uio, cred) uio->uio_iov->iov_len = count; error = ufs_read(vp, uio, 0, cred); uio->uio_resid += lost; + if ((VTOI(vp)->i_size - uio->uio_offset) <= 0) + *eofflagp = 1; + else + *eofflagp = 0; return (error); } -- 2.20.1