2006-10-11 12:20:50 +04:00
/*
2006-10-11 12:20:53 +04:00
* linux / fs / ext4 / xattr_user . c
2006-10-11 12:20:50 +04:00
* Handler for extended user attributes .
*
* Copyright ( C ) 2001 by Andreas Gruenbacher , < a . gruenbacher @ computer . org >
*/
# include <linux/string.h>
# include <linux/fs.h>
2008-04-30 02:13:32 +04:00
# include "ext4_jbd2.h"
# include "ext4.h"
2006-10-11 12:20:50 +04:00
# include "xattr.h"
static size_t
2009-11-13 12:52:56 +03:00
ext4_xattr_user_list ( struct dentry * dentry , char * list , size_t list_size ,
const char * name , size_t name_len , int type )
2006-10-11 12:20:50 +04:00
{
2008-07-12 03:27:31 +04:00
const size_t prefix_len = XATTR_USER_PREFIX_LEN ;
2006-10-11 12:20:50 +04:00
const size_t total_len = prefix_len + name_len + 1 ;
2009-11-13 12:52:56 +03:00
if ( ! test_opt ( dentry - > d_sb , XATTR_USER ) )
2006-10-11 12:20:50 +04:00
return 0 ;
if ( list & & total_len < = list_size ) {
memcpy ( list , XATTR_USER_PREFIX , prefix_len ) ;
memcpy ( list + prefix_len , name , name_len ) ;
list [ prefix_len + name_len ] = ' \0 ' ;
}
return total_len ;
}
static int
2009-11-13 12:52:56 +03:00
ext4_xattr_user_get ( struct dentry * dentry , const char * name ,
void * buffer , size_t size , int type )
2006-10-11 12:20:50 +04:00
{
if ( strcmp ( name , " " ) = = 0 )
return - EINVAL ;
2009-11-13 12:52:56 +03:00
if ( ! test_opt ( dentry - > d_sb , XATTR_USER ) )
2006-10-11 12:20:50 +04:00
return - EOPNOTSUPP ;
2009-11-13 12:52:56 +03:00
return ext4_xattr_get ( dentry - > d_inode , EXT4_XATTR_INDEX_USER ,
name , buffer , size ) ;
2006-10-11 12:20:50 +04:00
}
static int
2009-11-13 12:52:56 +03:00
ext4_xattr_user_set ( struct dentry * dentry , const char * name ,
const void * value , size_t size , int flags , int type )
2006-10-11 12:20:50 +04:00
{
if ( strcmp ( name , " " ) = = 0 )
return - EINVAL ;
2009-11-13 12:52:56 +03:00
if ( ! test_opt ( dentry - > d_sb , XATTR_USER ) )
2006-10-11 12:20:50 +04:00
return - EOPNOTSUPP ;
2009-11-13 12:52:56 +03:00
return ext4_xattr_set ( dentry - > d_inode , EXT4_XATTR_INDEX_USER ,
name , value , size , flags ) ;
2006-10-11 12:20:50 +04:00
}
2010-05-14 04:53:18 +04:00
const struct xattr_handler ext4_xattr_user_handler = {
2006-10-11 12:20:50 +04:00
. prefix = XATTR_USER_PREFIX ,
2006-10-11 12:20:53 +04:00
. list = ext4_xattr_user_list ,
. get = ext4_xattr_user_get ,
. set = ext4_xattr_user_set ,
2006-10-11 12:20:50 +04:00
} ;