|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.