1/* { dg-do compile } */
2/* { dg-options "-c -O2 -Wextra" } */
3#define O_RDONLY     (1<<0)
4#define O_WRONLY     (1<<1)
5#define O_RDWR       (O_RDONLY|O_WRONLY)
6#define O_CREAT      (1<<3)
7#define O_TRUNC      (1<<6)
8
9typedef enum {
10    OM_READ = 0,
11    OM_WRITE,
12    OM_READWRITE_NOCREATE,
13    OM_READWRITE_CREATE
14} OpenMode;
15
16extern int open(const char *name, int mode);
17
18void open_file(const char *filename, const OpenMode rw)
19{
20    int mode = 0;
21
22    switch( rw )
23    {
24    case OM_WRITE:
25        mode = O_WRONLY|O_CREAT|O_TRUNC;
26        break;
27    case OM_READ:
28        mode = O_RDONLY;
29        break;
30    case OM_READWRITE_NOCREATE:
31        mode = O_RDWR;
32        break;
33    case OM_READWRITE_CREATE:
34        mode = O_RDWR|O_CREAT|O_TRUNC;
35        break;
36    }
37
38    open( filename, mode );
39}
40