xref: /386bsd/usr/src/lib/libg++/libg++/open.cc (revision a2142627)
1 #include <open.h>
2 #pragma implementation
3 
open_cmd_arg(io_mode i,access_mode a)4 int open_cmd_arg(io_mode i, access_mode a) // decode modes
5 {
6   int arg;
7   switch(i)
8   {
9   case io_readonly:   arg = sio_read;                   break;
10   case io_writeonly:  arg = sio_write;                  break;
11   case io_readwrite:  arg = sio_readwrite;              break;
12   case io_appendonly: arg = sio_append | sio_write;     break;
13   case io_append:     arg = sio_append | sio_readwrite; break;
14   default:            return -1;
15   };
16   switch(a)
17   {
18   case a_createonly:  return arg | sa_createonly;
19   case a_create:      return arg | sa_create | sa_truncate;
20   case a_useonly:     return arg;
21   case a_use:         return arg | sa_create;
22   default:            return -1;
23   }
24 }
25 
fopen_cmd_arg(io_mode i)26 char* fopen_cmd_arg(io_mode i)
27 {
28   switch(i)
29   {
30   case io_readonly:  return "r";
31   case io_writeonly: return "w";
32   case io_readwrite: return "r+";
33   case io_appendonly:return "a";
34   case io_append:    return "a+";
35   default:           return 0;
36   }
37 }
38 
open_cmd_arg(const char * m)39 int open_cmd_arg(const char* m)
40 {
41   if (m == 0) return -1;
42   else if (m[0] == 'r') return (m[1] == '+')? io_readwrite : io_readonly;
43   else if (m[0] == 'w') return (m[1] == '+')? io_readwrite : io_writeonly;
44   else if (m[0] == 'a') return (m[1] == '+')? io_append : io_appendonly;
45   else  return -1;
46 }
47