Commit 8bad3ca
committed
fileutils: Use ModeType as the mask for mode checks
POSIX provides S_IS*(m) macros to portably interpret the mode type,
but does not define values for each type [1]. Alban pointed out that
st_mode is not a bitfield on Linux [2]. For example, Linux defines
[3]:
S_IFBLK 060000
S_IFDIR 040000
S_IFCHR 020000
So 'm&S_IFCHR == S_IFCHR', for example, would succeed for both
character and block devices. Go translates the system values to a
platform-agnostic bitfield [4], so the previous approach works on Go.
But it may be confusing for people used to the native non-bitfield
mode, so this commit moves us to an approach that does not rely on
Go's using a bitfield.
I've also dropped the 07000 portion of the previous 07777 mask in
favor of the cross-platform ModePerm mask. This avoids an internal
magic number, and the sticky, suid, and sgid bits don't make sense for
device nodes. And I'm using some contants from os instead of their
syscall analogs. We can't drop the syscall dependency, because we're
still using syscall to construct the Mknod arguments, but with this
commit we're no longer using it to inspect the source file type.
[1]: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html
[2]: opencontainers/runtime-tools#308 (comment)
[3]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/stat.h?h=v4.16#n9
[4]: https://github.com/golang/go/blob/b0d437f866eb8987cde7e6550cacd77876f36d4b/src/os/types.go#L451 parent 7d4729f commit 8bad3ca
1 file changed
+8
-8
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| 25 | + | |
25 | 26 | | |
26 | 27 | | |
27 | | - | |
| 28 | + | |
28 | 29 | | |
29 | 30 | | |
30 | 31 | | |
| |||
35 | 36 | | |
36 | 37 | | |
37 | 38 | | |
38 | | - | |
| 39 | + | |
39 | 40 | | |
40 | 41 | | |
41 | | - | |
42 | | - | |
43 | | - | |
44 | | - | |
45 | | - | |
| 42 | + | |
| 43 | + | |
46 | 44 | | |
| 45 | + | |
| 46 | + | |
47 | 47 | | |
48 | 48 | | |
49 | 49 | | |
| |||
76 | 76 | | |
77 | 77 | | |
78 | 78 | | |
79 | | - | |
| 79 | + | |
80 | 80 | | |
81 | 81 | | |
82 | 82 | | |
| |||
0 commit comments