aboutsummaryrefslogtreecommitdiffstats
path: root/fs/reiserfs/xattr.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/reiserfs/xattr.c')
-rw-r--r--fs/reiserfs/xattr.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c
index 66b26fdfff8d..e5ddb4e5ea94 100644
--- a/fs/reiserfs/xattr.c
+++ b/fs/reiserfs/xattr.c
@@ -756,7 +756,8 @@ find_xattr_handler_prefix(const struct xattr_handler **handlers,
756 return NULL; 756 return NULL;
757 757
758 for_each_xattr_handler(handlers, xah) { 758 for_each_xattr_handler(handlers, xah) {
759 if (strncmp(xah->prefix, name, strlen(xah->prefix)) == 0) 759 const char *prefix = xattr_prefix(xah);
760 if (strncmp(prefix, name, strlen(prefix)) == 0)
760 break; 761 break;
761 } 762 }
762 763
@@ -839,19 +840,16 @@ static int listxattr_filler(struct dir_context *ctx, const char *name,
839 840
840 handler = find_xattr_handler_prefix(b->dentry->d_sb->s_xattr, 841 handler = find_xattr_handler_prefix(b->dentry->d_sb->s_xattr,
841 name); 842 name);
842 if (!handler) /* Unsupported xattr name */ 843 if (!handler /* Unsupported xattr name */ ||
844 (handler->list && !handler->list(b->dentry)))
843 return 0; 845 return 0;
846 size = namelen + 1;
844 if (b->buf) { 847 if (b->buf) {
845 size = handler->list(handler, b->dentry,
846 b->buf + b->pos, b->size, name,
847 namelen);
848 if (size > b->size) 848 if (size > b->size)
849 return -ERANGE; 849 return -ERANGE;
850 } else { 850 memcpy(b->buf + b->pos, name, namelen);
851 size = handler->list(handler, b->dentry, 851 b->buf[b->pos + namelen] = 0;
852 NULL, 0, name, namelen);
853 } 852 }
854
855 b->pos += size; 853 b->pos += size;
856 } 854 }
857 return 0; 855 return 0;