XINU
Functions
rfsgetmode.c File Reference
#include <xinu.h>
Include dependency graph for rfsgetmode.c:

Go to the source code of this file.

Functions

int32 rfsgetmode (char *mode)
 

Function Documentation

◆ rfsgetmode()

int32 rfsgetmode ( char *  mode)

Definition at line 10 of file rfsgetmode.c.

References NULLCH, RF_MODE_N, RF_MODE_O, RF_MODE_R, RF_MODE_RW, RF_MODE_W, and SYSERR.

Referenced by rfsopen().

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 }
#define RF_MODE_N
Definition: rfilesys.h:14
#define RF_MODE_R
Definition: rfilesys.h:11
#define RF_MODE_RW
Definition: rfilesys.h:13
#define SYSERR
処理が失敗した場合
Definition: kernel.h:79
#define RF_MODE_W
Definition: rfilesys.h:12
int int32
符号あり32ビット整数(int)
Definition: kernel.h:11
#define RF_MODE_O
Definition: rfilesys.h:15
#define NULLCH
NULL文字(NULL終端)
Definition: kernel.h:70
Here is the caller graph for this function: