next up previous contents
Next: Loopback driver close Up: Egy STREAMS loopback Previous: Loopback driver start

Loopback driver open rutin

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 */
}



Csizmazia Balazs
Tue Apr 2 00:06:27 MET DST 1996