1
0
Fork 0
mirror of https://github.com/vbatts/go-mtree.git synced 2024-11-30 12:05:40 +00:00
go-mtree/xattr/xattr.go
Vincent Batts 4ab44bff01
*.go: goimports -w .`
Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
2023-10-24 09:09:57 -04:00

43 lines
1,001 B
Go

//go:build linux
// +build linux
package xattr
import (
"strings"
"syscall"
)
// Get returns the extended attributes (xattr) on file `path`, for the given `name`.
func Get(path, name string) ([]byte, error) {
dest := make([]byte, 1024)
i, err := syscall.Getxattr(path, name, dest)
if err != nil {
return nil, err
}
return dest[:i], nil
}
// Set sets the extended attributes (xattr) on file `path`, for the given `name` and `value`
func Set(path, name string, value []byte) error {
return syscall.Setxattr(path, name, value, 0)
}
// List returns a list of all the extended attributes (xattr) for file `path`
func List(path string) ([]string, error) {
dest := make([]byte, 1024)
i, err := syscall.Listxattr(path, dest)
if err != nil {
return nil, err
}
// If the returned list is empty, return nil instead of []string{""}
str := string(dest[:i])
if str == "" {
return nil, nil
}
return strings.Split(strings.TrimRight(str, nilByte), nilByte), nil
}
const nilByte = "\x00"