

/*
 * $Id: lkud.frag,v 1.3 96/01/09 08:27:41 abe Exp $
 */


/*
 * lkupdev() - look up device
 */

struct l_dev *
lkupdev(dev, i)
	dev_t *dev;			/* pointer to device number */
	int i;				/* inode match status */
{
	long inode;
	int low, hi, mid, ty;
	struct l_dev *dp;

	readdev();
	if (i) {
		inode = (long)Lf->inode;
		ty = Lf->inp_ty;
	}
/*
 * Search device table for match.
 */
	low = mid = 0;
	hi = Ndev - 1;
        while (low <= hi) {
                mid = (low + hi) / 2;
		dp = Sdev[mid];
		if (*dev < dp->rdev)
			hi = mid - 1;
		else if (*dev > dp->rdev)
                        low = mid + 1;
                else {
			if (i == 0 || ty != 1 || inode == dp->inode)
				return(dp);
			if ((long)Lf->inode < (long)dp->inode)
				hi = mid - 1;
			else
				low = mid + 1;
		}
	}
	return(NULL);
}
