lpbkopen(q, dev, flag, sflag)
queue_t *q;
dev_t dev;
int flag,sflag;
{
struct lpbk *mdevp; /* Aktualis minor device strukturara pointer */
if ((sflag != CLONEOPEN) && (sflag != 0))
return(OPENFAIL); /* Csak CLONEOPEN megengedett */
/* Keresni kell egy nem hasznalt minor device numbert */
if (sflag == CLONEOPEN) {
for (dev = 0; dev < lpbkcnt; dev++)
if (!(lpbkmdev[dev].lpbk_state & LPBKOPEN)) /* Ha nem nyitott */
break; /* ... akkor ez kell nekunk */
}
if (sflag == 0) dev=minor(dev);
if ((dev < 0) || (dev >= lpbkcnt)) /* Van meg szabad minor device? */
return(OPENFAIL); /* NINCS ... */
mdevp = &lpbkmdev[dev];
if (!(mdevp->lpbk_state & LPBKOPEN)) {
mdevp->lpbk_rdq = q; /* Ez egy tetsz. felhasznaloi struktura */
q->q_ptr = (caddr_t)mdevp;
WR(q)->q_ptr = (caddr_t)mdevp;
return(dev);
}
else
if (q != mdevp->lpbk_rdq)
return(OPENFAIL); /* Valaki mar megnyitotta es */
/* meg dolgozik ezen a streamen */
}