XINU
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  */
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 }
int32 lfgetmode(char *mode)
Definition: lfgetmode.c:9
全てのシステムヘッダファイルをインクルードする。
#define SYSERR
処理が失敗した場合
Definition: kernel.h:79
#define LF_MODE_O
Definition: lfilesys.h:45
#define LF_MODE_R
Definition: lfilesys.h:42
#define LF_MODE_N
Definition: lfilesys.h:46
#define LF_MODE_W
Definition: lfilesys.h:43
int int32
符号あり32ビット整数(int)
Definition: kernel.h:11
#define LF_MODE_RW
Definition: lfilesys.h:44
#define NULLCH
NULL文字(NULL終端)
Definition: kernel.h:70