|
|
1.1 root 1: /* ckmode.c - ckmode */
2:
3: #include <conf.h>
4: #include <kernel.h>
5: #include <file.h>
6:
7: /*------------------------------------------------------------------------
8: * ckmode -- parse open's mode argument and generate actual mode bits
9: *------------------------------------------------------------------------
10: */
11: ckmode(mode)
12: char *mode;
13: {
14: int mbits;
15: char ch;
16:
17: mbits = 0;
18: while (ch = *mode++)
19: switch (ch) {
20:
21: case FLRMODE:
22: if (mbits&FLREAD) return(SYSERR);
23: mbits |= FLREAD;
24: break;
25:
26: case FLWMODE:
27: if (mbits&FLWRITE) return(SYSERR);
28: mbits |= FLWRITE;
29: break;
30:
31: case FLOMODE:
32: if (mbits&FLOLD || mbits&FLNEW)
33: return(SYSERR);
34: mbits |= FLOLD;
35: break;
36:
37: case FLNMODE:
38: if (mbits&FLOLD || mbits&FLNEW)
39: return(SYSERR);
40: mbits |= FLNEW;
41: break;
42:
43: default: return(SYSERR);
44: }
45: if ((mbits&FLREAD) == (mbits&FLWRITE)) /* default: allow R + W */
46: mbits |= FLRW;
47: return(mbits);
48: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.