2005-04-17 02:20:36 +04:00
# include <linux/init.h>
# include <linux/posix_acl.h>
# define REISERFS_ACL_VERSION 0x0001
typedef struct {
2005-07-13 07:21:28 +04:00
__le16 e_tag ;
__le16 e_perm ;
__le32 e_id ;
2005-04-17 02:20:36 +04:00
} reiserfs_acl_entry ;
typedef struct {
2005-07-13 07:21:28 +04:00
__le16 e_tag ;
__le16 e_perm ;
2005-04-17 02:20:36 +04:00
} reiserfs_acl_entry_short ;
typedef struct {
2005-07-13 07:21:28 +04:00
__le32 a_version ;
2005-04-17 02:20:36 +04:00
} reiserfs_acl_header ;
static inline size_t reiserfs_acl_size ( int count )
{
if ( count < = 4 ) {
return sizeof ( reiserfs_acl_header ) +
2005-07-13 07:21:28 +04:00
count * sizeof ( reiserfs_acl_entry_short ) ;
2005-04-17 02:20:36 +04:00
} else {
return sizeof ( reiserfs_acl_header ) +
2005-07-13 07:21:28 +04:00
4 * sizeof ( reiserfs_acl_entry_short ) +
( count - 4 ) * sizeof ( reiserfs_acl_entry ) ;
2005-04-17 02:20:36 +04:00
}
}
static inline int reiserfs_acl_count ( size_t size )
{
ssize_t s ;
size - = sizeof ( reiserfs_acl_header ) ;
s = size - 4 * sizeof ( reiserfs_acl_entry_short ) ;
if ( s < 0 ) {
if ( size % sizeof ( reiserfs_acl_entry_short ) )
return - 1 ;
return size / sizeof ( reiserfs_acl_entry_short ) ;
} else {
if ( s % sizeof ( reiserfs_acl_entry ) )
return - 1 ;
return s / sizeof ( reiserfs_acl_entry ) + 4 ;
}
}
# ifdef CONFIG_REISERFS_FS_POSIX_ACL
2005-07-13 07:21:28 +04:00
struct posix_acl * reiserfs_get_acl ( struct inode * inode , int type ) ;
int reiserfs_acl_chmod ( struct inode * inode ) ;
2009-03-30 22:02:39 +04:00
int reiserfs_inherit_default_acl ( struct reiserfs_transaction_handle * th ,
struct inode * dir , struct dentry * dentry ,
2005-07-13 07:21:28 +04:00
struct inode * inode ) ;
int reiserfs_cache_default_acl ( struct inode * dir ) ;
2010-05-14 04:53:19 +04:00
extern const struct xattr_handler reiserfs_posix_acl_default_handler ;
extern const struct xattr_handler reiserfs_posix_acl_access_handler ;
2006-09-29 13:00:00 +04:00
2005-04-17 02:20:36 +04:00
# else
# define reiserfs_cache_default_acl(inode) 0
2011-07-23 19:37:31 +04:00
# define reiserfs_get_acl NULL
2006-02-05 10:27:51 +03:00
2005-07-13 07:21:28 +04:00
static inline int reiserfs_acl_chmod ( struct inode * inode )
2005-04-17 02:20:36 +04:00
{
2005-07-13 07:21:28 +04:00
return 0 ;
2005-04-17 02:20:36 +04:00
}
static inline int
2009-03-31 00:32:40 +04:00
reiserfs_inherit_default_acl ( struct reiserfs_transaction_handle * th ,
const struct inode * dir , struct dentry * dentry ,
2005-07-13 07:21:28 +04:00
struct inode * inode )
2005-04-17 02:20:36 +04:00
{
2005-07-13 07:21:28 +04:00
return 0 ;
2005-04-17 02:20:36 +04:00
}
# endif