Use github.com/pkg/xattr for reading/writing extended attributes.

The one previously used, github.com/redsift/xattr, is old and can only process
user-defined extended attributes, not system ones.
This commit is contained in:
Gilbert Chen
2020-10-16 20:54:08 -04:00
parent 7c36311aa9
commit b392302c06

View File

@@ -13,7 +13,7 @@ import (
"path/filepath" "path/filepath"
"syscall" "syscall"
"github.com/gilbertchen/xattr" "github.com/pkg/xattr"
) )
func Readlink(path string) (isRegular bool, s string, err error) { func Readlink(path string) (isRegular bool, s string, err error) {
@@ -50,11 +50,11 @@ func SetOwner(fullPath string, entry *Entry, fileInfo *os.FileInfo) bool {
func (entry *Entry) ReadAttributes(top string) { func (entry *Entry) ReadAttributes(top string) {
fullPath := filepath.Join(top, entry.Path) fullPath := filepath.Join(top, entry.Path)
attributes, _ := xattr.Listxattr(fullPath) attributes, _ := xattr.List(fullPath)
if len(attributes) > 0 { if len(attributes) > 0 {
entry.Attributes = make(map[string][]byte) entry.Attributes = make(map[string][]byte)
for _, name := range attributes { for _, name := range attributes {
attribute, err := xattr.Getxattr(fullPath, name) attribute, err := xattr.Get(fullPath, name)
if err == nil { if err == nil {
entry.Attributes[name] = attribute entry.Attributes[name] = attribute
} }
@@ -63,24 +63,25 @@ func (entry *Entry) ReadAttributes(top string) {
} }
func (entry *Entry) SetAttributesToFile(fullPath string) { func (entry *Entry) SetAttributesToFile(fullPath string) {
names, _ := xattr.Listxattr(fullPath) names, _ := xattr.List(fullPath)
for _, name := range names { for _, name := range names {
newAttribute, found := entry.Attributes[name] newAttribute, found := entry.Attributes[name]
if found { if found {
oldAttribute, _ := xattr.Getxattr(fullPath, name) oldAttribute, _ := xattr.Get(fullPath, name)
if !bytes.Equal(oldAttribute, newAttribute) { if !bytes.Equal(oldAttribute, newAttribute) {
xattr.Setxattr(fullPath, name, newAttribute) xattr.Set(fullPath, name, newAttribute)
} }
delete(entry.Attributes, name) delete(entry.Attributes, name)
} else { } else {
xattr.Removexattr(fullPath, name) xattr.Remove(fullPath, name)
} }
} }
for name, attribute := range entry.Attributes { for name, attribute := range entry.Attributes {
xattr.Setxattr(fullPath, name, attribute) xattr.Set(fullPath, name, attribute)
} }
} }