]> arthur.barton.de Git - netatalk.git/commitdiff
xattrs on BSD, bug #562
authorRalph Boehme <rb@sernet.de>
Tue, 20 May 2014 16:27:55 +0000 (18:27 +0200)
committerRalph Boehme <rb@sernet.de>
Tue, 20 May 2014 16:28:09 +0000 (18:28 +0200)
Signed-off-by: Ralph Boehme <rb@sernet.de>
NEWS
libatalk/vfs/extattr.c

diff --git a/NEWS b/NEWS
index da5a0e71448101f8d20cadcde040ae5a6218ee1e..afbc751af26cb161876c6a750d0765d4834e8240 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,7 @@ Changes in 3.1.2
 * FIX: debian initscript: add 0 and 6 to Default-Stop. debian-bug#745520
 * FIX: put the Solaris share reservation after our locking stuff, bug #560.
 * UPD: Improve Linux quota behaviour
+* FIX: xattrs on *BSD, bug #562
 
 Changes in 3.1.1
 ================
index 73724d53080d66908ae3c07fa9166f58c10bd45e..4a338bae5a3869f2417bc2cdbe6f2f03290bf9bc 100644 (file)
@@ -240,17 +240,22 @@ ssize_t sys_lgetxattr (const char *path, const char *uname, void *value, size_t
        return lgetea(path, name, value, size);
 #elif defined(HAVE_EXTATTR_GET_LINK)
        ssize_t retval;
-       if((retval=extattr_get_link(path, EXTATTR_NAMESPACE_USER, uname, NULL, 0)) >= 0) {
-               if(retval > size) {
-                       errno = ERANGE;
-                       return -1;
-               }
-               if((retval=extattr_get_link(path, EXTATTR_NAMESPACE_USER, uname, value, size)) >= 0)
-                       return retval;
-       }
-       
-       LOG(log_maxdebug, logtype_default, "sys_lgetxattr: extattr_get_link() failed with: %s\n", strerror(errno));
-       return -1;
+
+       retval = extattr_get_link(path, EXTATTR_NAMESPACE_USER, uname, NULL, 0);
+    if (retval == -1) {
+        LOG(log_maxdebug, logtype_default, "extattr_get_link(): %s",
+            strerror(errno));
+        return -1;
+    }
+    if (size == 0)
+        /* Only interested in size of xattr */
+        return retval;
+    if (retval > size) {
+        errno = ERANGE;
+        return -1;
+    }
+    return extattr_get_link(path, EXTATTR_NAMESPACE_USER, uname, value, size);
+
 #elif defined(HAVE_ATTR_GET)
        int retval, flags = ATTR_DONTFOLLOW;
        int valuelength = (int)size;