Annotation of xinu/sys/LSI/dsopen.c, revision 1.1.1.1

1.1       root        1: /* dsopen.c - dsopen */
                      2: 
                      3: #include <conf.h>
                      4: #include <kernel.h>
                      5: #include <disk.h>
                      6: #include <lfile.h>
                      7: #include <dir.h>
                      8: 
                      9: /*------------------------------------------------------------------------
                     10:  *  dsopen  --  open/create a file on the specified disk device
                     11:  *------------------------------------------------------------------------
                     12:  */
                     13: #ifdef Ndf
                     14: dsopen(devptr, filenam, mode)
                     15: struct devsw   *devptr;
                     16: char   *filenam;
                     17: char   *mode;
                     18: {
                     19:        struct  dir     *dirptr;
                     20:        struct  flblk   *flptr;
                     21:        struct  fdes    *fdptr;
                     22:        DBADDR  dba;
                     23:        int     mbits, findex;
                     24:        int     retcode;
                     25:        char    ps;
                     26: 
                     27:        disable(ps);
                     28:        dirptr = dsdirec(devptr->dvnum);
                     29:        if ( (mbits=ckmode(mode)) == SYSERR)
                     30:                retcode = SYSERR;
                     31:        else if( (int)(fdptr=dfdsrch(devptr->dvioblk,filenam,mbits))
                     32:                == SYSERR)
                     33:                retcode = SYSERR;
                     34:        else if ( (findex=dfalloc()) == SYSERR)
                     35:                retcode = SYSERR;
                     36:        else {
                     37:                flptr = &fltab[findex];
                     38:                flptr->fl_dev = devptr->dvnum;
                     39:                flptr->fl_dent = fdptr;
                     40:                flptr->fl_mode = mbits & FLRW;
                     41:                flptr->fl_iba = fdptr->fdiba;
                     42:                ibget(flptr->fl_dev, flptr->fl_iba, &(flptr->fl_iblk));
                     43:                flptr->fl_pos = 0L;
                     44:                flptr->fl_dch = FALSE;
                     45:                dba = flptr->fl_iblk.ib_dba[flptr->fl_ipnum = 0];
                     46:                if (dba != DBNULL) {
                     47:                        read(flptr->fl_dev, flptr->fl_buff, dba);
                     48:                        flptr->fl_bptr = flptr->fl_buff;
                     49:                } else
                     50:                        flptr->fl_bptr = &flptr->fl_buff[DBUFSIZ];
                     51:                retcode = flptr->fl_id;
                     52:        }
                     53:        restore(ps);
                     54:        return(retcode);
                     55: }
                     56: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.