- int error;
-
- if (strlen(name) < sizeof(XATTR_USER_PREFIX))
- return -EINVAL;
-
- if (!reiserfs_xattrs_user (inode->i_sb))
- return -EOPNOTSUPP;
-
- if (!S_ISREG (inode->i_mode) &&
- (!S_ISDIR (inode->i_mode) || inode->i_mode & S_ISVTX))
- return -EPERM;
-
- error = reiserfs_permission_locked (inode, MAY_WRITE, NULL);
- if (error)
- return error;
-
- return 0;
-}
-
-static int
-user_list (struct inode *inode, const char *name, int namelen, char *out)
-{
- int len = namelen;
- if (!reiserfs_xattrs_user (inode->i_sb))
- return 0;
-
- if (out)
- memcpy (out, name, len);
-
- return len;
+ const size_t len = name_len + 1;
+
+ if (!reiserfs_xattrs_user(inode->i_sb))
+ return 0;
+ if (list && len <= list_size) {
+ memcpy(list, name, name_len);
+ list[name_len] = '\0';
+ }
+ return len;