From a04d24be19aa000f89ee22d0197da4689cc487b2 Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Tue, 20 May 2014 18:27:55 +0200 Subject: [PATCH] xattrs on BSD, bug #562 Signed-off-by: Ralph Boehme --- NEWS | 1 + libatalk/vfs/extattr.c | 27 ++++++++++++++++----------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/NEWS b/NEWS index da5a0e71..afbc751a 100644 --- 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 ================ diff --git a/libatalk/vfs/extattr.c b/libatalk/vfs/extattr.c index 73724d53..4a338bae 100644 --- a/libatalk/vfs/extattr.c +++ b/libatalk/vfs/extattr.c @@ -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; -- 2.39.2