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