Skip to content

Commit ea03321

Browse files
committed
runtimetest: Use ModeType as the mask in the symlink check
We've been using ModeSymlink as the mask since the check landed in da25004 (runtimetest: add linux default symbolic link validation, 2016-11-30, #284). POSIX provides S_IS*(m) macros to portably interpret the mode type, but does not define values for each type [2]. Alban pointed out that st_mode is not a bitfield on Linux [1]. 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. [1]: #308 (comment) [2]: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html [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#L45 Signed-off-by: W. Trevor King <[email protected]>
1 parent f1ff2d0 commit ea03321

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

cmd/runtimetest/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -782,7 +782,7 @@ func (c *complianceTester) validateDefaultSymlinks(spec *rspec.Spec) error {
782782
continue
783783
}
784784

785-
isSymlink := fi.Mode()&os.ModeSymlink == os.ModeSymlink
785+
isSymlink := fi.Mode()&os.ModeType == os.ModeSymlink
786786
rfcError, err = c.Ok(
787787
isSymlink,
788788
specerror.DefaultRuntimeLinuxSymlinks,

0 commit comments

Comments
 (0)