X-Git-Url: https://arthur.barton.de/gitweb/?p=netatalk.git;a=blobdiff_plain;f=libatalk%2Fvfs%2Fextattr.c;fp=libatalk%2Fvfs%2Fextattr.c;h=4a338bae5a3869f2417bc2cdbe6f2f03290bf9bc;hp=73724d53080d66908ae3c07fa9166f58c10bd45e;hb=ab6e6f8ed24667ced438afe4df5997469a2ff53b;hpb=471d63120ea3d21bd9d6eb3b220d1e3eec419f68 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;