version 1.25, 1994/06/15 17:52:32 |
version 1.27, 1994/06/29 06:34:29 |
|
|
|
/* $NetBSD$ */ |
|
|
/* |
/* |
* Copyright (c) 1992, 1993 |
* Copyright (c) 1992, 1993 |
* The Regents of the University of California. All rights reserved. |
* The Regents of the University of California. All rights reserved. |
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
* |
* |
* from: @(#)kernfs_vnops.c 8.6 (Berkeley) 2/10/94 |
* @(#)kernfs_vnops.c 8.9 (Berkeley) 6/15/94 |
* $Id$ |
|
*/ |
*/ |
|
|
/* |
/* |
Line 227 kernfs_lookup(ap) |
|
Line 228 kernfs_lookup(ap) |
|
} |
} |
#endif |
#endif |
|
|
*vpp = NULL; |
*vpp = NULLVP; |
|
|
for (error = ENOENT, kt = kern_targets, i = 0; i < nkern_targets; |
for (error = ENOENT, kt = kern_targets, i = 0; i < nkern_targets; |
kt++, i++) { |
kt++, i++) { |
if (cnp->cn_namelen == strlen(kt->kt_name) && |
if (cnp->cn_namelen == kt->kt_namlen && |
bcmp(kt->kt_name, pname, cnp->cn_namelen) == 0) { |
bcmp(kt->kt_name, pname, cnp->cn_namelen) == 0) { |
error = 0; |
error = 0; |
break; |
break; |
Line 297 kernfs_access(ap) |
|
Line 298 kernfs_access(ap) |
|
struct proc *a_p; |
struct proc *a_p; |
} */ *ap; |
} */ *ap; |
{ |
{ |
register struct vnode *vp = ap->a_vp; |
struct vnode *vp = ap->a_vp; |
register struct ucred *cred = ap->a_cred; |
struct ucred *cred = ap->a_cred; |
mode_t amode = ap->a_mode; |
mode_t amode = ap->a_mode; |
mode_t fmode = |
mode_t fmode = |
(vp->v_flag & VROOT) ? DIR_MODE : VTOKERN(vp)->kf_kt->kt_mode; |
(vp->v_flag & VROOT) ? DIR_MODE : VTOKERN(vp)->kf_kt->kt_mode; |
mode_t mask = 0; |
mode_t mask = 0; |
register gid_t *gp; |
gid_t *gp; |
int i; |
int i; |
|
|
/* Some files are simply not modifiable. */ |
/* Some files are simply not modifiable. */ |
Line 485 kernfs_readdir(ap) |
|
Line 486 kernfs_readdir(ap) |
|
struct vnode *a_vp; |
struct vnode *a_vp; |
struct uio *a_uio; |
struct uio *a_uio; |
struct ucred *a_cred; |
struct ucred *a_cred; |
|
int *a_eofflag; |
|
u_long *a_cookies; |
|
int a_ncookies; |
} */ *ap; |
} */ *ap; |
{ |
{ |
struct uio *uio = ap->a_uio; |
struct uio *uio = ap->a_uio; |
register struct kern_target *kt; |
struct kern_target *kt; |
struct dirent d; |
struct dirent d; |
int i; |
int i; |
int error; |
int error; |
Line 496 kernfs_readdir(ap) |
|
Line 500 kernfs_readdir(ap) |
|
if (ap->a_vp->v_type != VDIR) |
if (ap->a_vp->v_type != VDIR) |
return (ENOTDIR); |
return (ENOTDIR); |
|
|
|
/* |
|
* We don't allow exporting kernfs mounts, and currently local |
|
* requests do not need cookies. |
|
*/ |
|
if (ap->a_ncookies != NULL) |
|
panic("kernfs_readdir: not hungry"); |
|
|
i = uio->uio_offset / UIO_MX; |
i = uio->uio_offset / UIO_MX; |
error = 0; |
error = 0; |
for (kt = &kern_targets[i]; |
for (kt = &kern_targets[i]; |
uio->uio_resid >= UIO_MX && i < nkern_targets; kt++, i++) { |
uio->uio_resid >= UIO_MX && i < nkern_targets; kt++, i++) { |
register struct dirent *dp = &d; |
struct dirent *dp = &d; |
#ifdef KERNFS_DIAGNOSTIC |
#ifdef KERNFS_DIAGNOSTIC |
printf("kernfs_readdir: i = %d\n", i); |
printf("kernfs_readdir: i = %d\n", i); |
#endif |
#endif |
|
|
if (kt->kt_tag == KTT_DEVICE) { |
if (kt->kt_tag == KTT_DEVICE) { |
register dev_t *dp = kt->kt_data; |
dev_t *dp = kt->kt_data; |
struct vnode *fvp; |
struct vnode *fvp; |
|
|
if (*dp == NODEV || !vfinddev(*dp, kt->kt_vtype, &fvp)) |
if (*dp == NODEV || !vfinddev(*dp, kt->kt_vtype, &fvp)) |
continue; |
continue; |
} |
} |
|
|
bzero((caddr_t)dp, UIO_MX); |
bzero((caddr_t)dp, UIO_MX); |
dp->d_namlen = kt->kt_namlen; |
dp->d_namlen = kt->kt_namlen; |
bcopy(kt->kt_name, dp->d_name, kt->kt_namlen + 1); |
bcopy(kt->kt_name, dp->d_name, kt->kt_namlen+1); |
|
|
#ifdef KERNFS_DIAGNOSTIC |
#ifdef KERNFS_DIAGNOSTIC |
printf("kernfs_readdir: name = %s, len = %d\n", |
printf("kernfs_readdir: name = %s, len = %d\n", |
dp->d_name, dp->d_namlen); |
dp->d_name, dp->d_namlen); |