// +build linux package xattr import ( "syscall" "github.com/opencontainers/runc/libcontainer/system" ) func XattrEnabled(path string) bool { if Setxattr(path, "user.test", "") == syscall.ENOTSUP { return false } return true } func stringsfromByte(buf []byte) (result []string) { offset := 0 for index, b := range buf { if b == 0 { result = append(result, string(buf[offset:index])) offset = index + 1 } } return } func Listxattr(path string) ([]string, error) { size, err := system.Llistxattr(path, nil) if err != nil { return nil, err } buf := make([]byte, size) read, err := system.Llistxattr(path, buf) if err != nil { return nil, err } names := stringsfromByte(buf[:read]) return names, nil } func Getxattr(path, attr string) (string, error) { value, err := system.Lgetxattr(path, attr) if err != nil { return "", err } return string(value), nil } func Setxattr(path, xattr, value string) error { return system.Lsetxattr(path, xattr, []byte(value), 0) }