Exemple #1
0
int
smb_dev2share(int fd, int mode, struct smb_cred *scred,
	struct smb_share **sspp)
{
	struct file *fp;
	struct vnode *vp;
	struct smb_dev *sdp;
	struct smb_share *ssp;
	dev_t dev;
	int error;

	fp = nsmb_getfp(scred->scr_p->p_fd, fd, FREAD | FWRITE);
	if (fp == NULL)
		return EBADF;
	vp = (struct vnode*)fp->f_data;
	if (vp == NULL)
		return EBADF;
	dev = vp->v_rdev;
	if (dev == NODEV)
		return EBADF;
	SMB_CHECKMINOR(dev);
	ssp = sdp->sd_share;
	if (ssp == NULL)
		return ENOTCONN;
	error = smb_share_get(ssp, LK_EXCLUSIVE, scred);
	if (error)
		return error;
	*sspp = ssp;
	return 0;
}
Exemple #2
0
int
smb_dev2share(int fd, int mode, struct smb_cred *scred,
	struct smb_share **sspp)
{
	struct file *fp;
	struct vnode *vp;
	struct smb_dev *sdp;
	struct smb_share *ssp;
	struct cdev *dev;
	int error;

	fp = nsmb_getfp(scred->scr_td->td_proc->p_fd, fd, FREAD | FWRITE);
	if (fp == NULL)
		return EBADF;
	vp = fp->f_vnode;
	if (vp == NULL) {
		fdrop(fp, curthread);
		return EBADF;
	}
	if (vp->v_type != VCHR) {
		fdrop(fp, curthread);
		return EBADF;
	}
	dev = vp->v_rdev;
	SMB_CHECKMINOR(dev);
	ssp = sdp->sd_share;
	if (ssp == NULL) {
		fdrop(fp, curthread);
		return ENOTCONN;
	}
	error = smb_share_get(ssp, LK_EXCLUSIVE, scred);
	if (error == 0) 
		*sspp = ssp;
	fdrop(fp, curthread);
	return error;
}