From 477e1e01eadf5a79ce4b36634474f9c4802e538a Mon Sep 17 00:00:00 2001 From: Riceball LEE Date: Mon, 13 Aug 2012 16:53:34 +0800 Subject: [PATCH] + IsXattrExists and - remove 'user.' prefix for linux. --- xattr_linux.go | 95 +++++++++++++++++++++++++++----------------------- 1 file changed, 52 insertions(+), 43 deletions(-) diff --git a/xattr_linux.go b/xattr_linux.go index 6e6bd22..9f97907 100644 --- a/xattr_linux.go +++ b/xattr_linux.go @@ -1,74 +1,83 @@ package xattr +/* import ( - "strings" + "strings" ) const ( - userPrefix = "user." + userPrefix = "user." ) // Linux xattrs have a manditory prefix of "user.". This is prepended // transparently for Get/Set/Remove and hidden in List +*/ + + +func IsXattrExists(path, name string) bool { + _, err := getxattr(path, name, nil, 0) + return err == nil +} // Retrieve extended attribute data associated with path. func Getxattr(path, name string) ([]byte, error) { - name = userPrefix + name - // find size. - size, err := getxattr(path, name, nil, 0) - if err != nil { - return nil, &XAttrError{"getxattr", path, name, err} - } - buf := make([]byte, size) - // Read into buffer of that size. - read, err := getxattr(path, name, &buf[0], size) - if err != nil { - return nil, &XAttrError{"getxattr", path, name, err} - } - return buf[:read], nil + //name = userPrefix + name + // find size. + size, err := getxattr(path, name, nil, 0) + if err != nil { + return nil, &XAttrError{"getxattr", path, name, err} + } + buf := make([]byte, size) + // Read into buffer of that size. + read, err := getxattr(path, name, &buf[0], size) + if err != nil { + return nil, &XAttrError{"getxattr", path, name, err} + } + return buf[:read], nil } // Retrieves a list of names of extended attributes associated with the // given path in the file system. func Listxattr(path string) ([]string, error) { - // find size. - size, err := listxattr(path, nil, 0) - if err != nil { - return nil, &XAttrError{"listxattr", path, "", err} - } - buf := make([]byte, size) - // Read into buffer of that size. - read, err := listxattr(path, &buf[0], size) - if err != nil { - return nil, &XAttrError{"listxattr", path, "", err} - } - return stripUserPrefix(nullTermToStrings(buf[:read])), nil + // find size. + size, err := listxattr(path, nil, 0) + if err != nil { + return nil, &XAttrError{"listxattr", path, "", err} + } + buf := make([]byte, size) + // Read into buffer of that size. + read, err := listxattr(path, &buf[0], size) + if err != nil { + return nil, &XAttrError{"listxattr", path, "", err} + } + return nullTermToStrings(buf[:read]), nil + //return stripUserPrefix(nullTermToStrings(buf[:read])), nil } // Associates name and data together as an attribute of path. func Setxattr(path, name string, data []byte) error { - name = userPrefix + name - if err := setxattr(path, name, &data[0], len(data)); err != nil { - return &XAttrError{"setxattr", path, name, err} - } - return nil + //name = userPrefix + name + if err := setxattr(path, name, &data[0], len(data)); err != nil { + return &XAttrError{"setxattr", path, name, err} + } + return nil } // Remove the attribute. func Removexattr(path, name string) error { - name = userPrefix + name - if err := removexattr(path, name); err != nil { - return &XAttrError{"removexattr", path, name, err} - } - return nil + //name = userPrefix + name + if err := removexattr(path, name); err != nil { + return &XAttrError{"removexattr", path, name, err} + } + return nil } // Strip off "user." prefixes from attribute names. func stripUserPrefix(s []string) []string { - for i, a := range s { - if strings.HasPrefix(a, userPrefix) { - s[i] = a[5:] - } - } - return s + for i, a := range s { + if strings.HasPrefix(a, userPrefix) { + s[i] = a[5:] + } + } + return s }