oflag.go

 1package sys
 2
 3// Oflag are flags used for FS.OpenFile. Values, including zero, should not be
 4// interpreted numerically. Instead, use by constants prefixed with 'O_' with
 5// special casing noted below.
 6//
 7// # Notes
 8//
 9//   - O_RDONLY, O_RDWR and O_WRONLY are mutually exclusive, while the other
10//     flags can coexist bitwise.
11//   - This is like `flag` in os.OpenFile and `oflag` in POSIX. See
12//     https://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html
13type Oflag uint32
14
15// This is a subset of oflags to reduce implementation burden. `wasip1` splits
16// these across `oflags` and `fdflags`. We can't rely on the Go `os` package,
17// as it is missing some values. Any flags added will be defined in POSIX
18// order, as needed by functions that explicitly document accepting them.
19//
20// https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#-oflags-flagsu16
21// https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#-fdflags-flagsu16
22const (
23	// O_RDONLY is like os.O_RDONLY
24	O_RDONLY Oflag = iota
25
26	// O_RDWR is like os.O_RDWR
27	O_RDWR
28
29	// O_WRONLY is like os.O_WRONLY
30	O_WRONLY
31
32	// Define bitflags as they are in POSIX `open`: alphabetically
33
34	// O_APPEND is like os.O_APPEND
35	O_APPEND Oflag = 1 << iota
36
37	// O_CREAT is link os.O_CREATE
38	O_CREAT
39
40	// O_DIRECTORY is defined on some platforms as syscall.O_DIRECTORY.
41	//
42	// Note: This ensures that the opened file is a directory. Those emulating
43	// on platforms that don't support the O_DIRECTORY, can double-check the
44	// result with File.IsDir (or stat) and err if not a directory.
45	O_DIRECTORY
46
47	// O_DSYNC is defined on some platforms as syscall.O_DSYNC.
48	O_DSYNC
49
50	// O_EXCL is defined on some platforms as syscall.O_EXCL.
51	O_EXCL
52
53	// O_NOFOLLOW is defined on some platforms as syscall.O_NOFOLLOW.
54	//
55	// Note: This allows programs to ensure that if the opened file is a
56	// symbolic link, the link itself is opened instead of its target.
57	O_NOFOLLOW
58
59	// O_NONBLOCK is defined on some platforms as syscall.O_NONBLOCK.
60	O_NONBLOCK
61
62	// O_RSYNC is defined on some platforms as syscall.O_RSYNC.
63	O_RSYNC
64
65	// O_SYNC is defined on some platforms as syscall.O_SYNC.
66	O_SYNC
67
68	// O_TRUNC is defined on some platforms as syscall.O_TRUNC.
69	O_TRUNC
70)