XINU
device
rfs
rfsgetmode.c
Go to the documentation of this file.
1
/* rfsgetmode.c - rfsgetmode */
2
3
#include <
xinu.h
>
4
5
/*------------------------------------------------------------------------
6
* rfsgetmode - Parse mode argument and generate integer of mode bits
7
*------------------------------------------------------------------------
8
*/
9
10
int32
rfsgetmode
(
11
char
*mode
/* String of mode characters */
12
)
13
{
14
int32
mbits;
/* Mode bits to return (in host */
15
/* byte order) */
16
char
ch;
/* Next character in mode string*/
17
18
mbits = 0;
19
20
/* Mode string specifies: */
21
/* r - read */
22
/* w - write */
23
/* o - old (file must exist) */
24
/* n - new (create a new file) */
25
26
while
( (ch = *mode++) !=
NULLCH
) {
27
switch
(ch) {
28
29
case
'r'
:
if
(mbits&
RF_MODE_R
) {
30
return
SYSERR
;
31
}
32
mbits |=
RF_MODE_R
;
33
continue
;
34
35
case
'w'
:
if
(mbits&
RF_MODE_W
) {
36
return
SYSERR
;
37
}
38
mbits |=
RF_MODE_W
;
39
continue
;
40
41
case
'o'
:
if
(mbits&
RF_MODE_O
|| mbits&
RF_MODE_N
) {
42
return
SYSERR
;
43
}
44
mbits |=
RF_MODE_O
;
45
break
;
46
47
case
'n'
:
if
(mbits&
RF_MODE_O
|| mbits&RF_MODE_N) {
48
return
SYSERR
;
49
}
50
mbits |=
RF_MODE_N
;
51
break
;
52
53
default
:
return
SYSERR
;
54
}
55
}
56
57
/* If neither read nor write specified, allow both */
58
59
if
( (mbits&
RF_MODE_RW
) == 0 ) {
60
mbits |=
RF_MODE_RW
;
61
}
62
return
mbits;
63
}
RF_MODE_N
#define RF_MODE_N
Definition:
rfilesys.h:14
RF_MODE_R
#define RF_MODE_R
Definition:
rfilesys.h:11
RF_MODE_RW
#define RF_MODE_RW
Definition:
rfilesys.h:13
xinu.h
全てのシステムヘッダファイルをインクルードする。
SYSERR
#define SYSERR
処理が失敗した場合
Definition:
kernel.h:79
RF_MODE_W
#define RF_MODE_W
Definition:
rfilesys.h:12
int32
int int32
符号あり32ビット整数(int)
Definition:
kernel.h:11
RF_MODE_O
#define RF_MODE_O
Definition:
rfilesys.h:15
rfsgetmode
int32 rfsgetmode(char *mode)
Definition:
rfsgetmode.c:10
NULLCH
#define NULLCH
NULL文字(NULL終端)
Definition:
kernel.h:70
Generated by
1.8.13