Changeset View
Changeset View
Standalone View
Standalone View
sys/fs/ext2fs/ext2_extattr.h
Context not available. | |||||
#define _FS_EXT2FS_EXT2_EXTARTTR_H_ | #define _FS_EXT2FS_EXT2_EXTARTTR_H_ | ||||
/* Linux xattr name indexes */ | /* Linux xattr name indexes */ | ||||
#define EXT4_XATTR_INDEX_USER 1 | #define EXT4_XATTR_INDEX_USER 1 | ||||
#define EXT4_XATTR_INDEX_POSIX_ACL_ACCESS 2 | #define EXT4_XATTR_INDEX_POSIX_ACL_ACCESS 2 | ||||
#define EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT 3 | #define EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT 3 | ||||
#define EXT4_XATTR_INDEX_TRUSTED 4 | #define EXT4_XATTR_INDEX_TRUSTED 4 | ||||
#define EXT4_XATTR_INDEX_LUSTRE 5 | #define EXT4_XATTR_INDEX_LUSTRE 5 | ||||
#define EXT4_XATTR_INDEX_SECURITY 6 | #define EXT4_XATTR_INDEX_SECURITY 6 | ||||
#define EXT4_XATTR_INDEX_SYSTEM 7 | #define EXT4_XATTR_INDEX_SYSTEM 7 | ||||
#define EXT4_XATTR_INDEX_RICHACL 8 | #define EXT4_XATTR_INDEX_RICHACL 8 | ||||
#define EXT4_XATTR_INDEX_ENCRYPTION 9 | #define EXT4_XATTR_INDEX_ENCRYPTION 9 | ||||
/* Magic value in attribute blocks */ | /* Magic value in attribute blocks */ | ||||
#define EXTATTR_MAGIC 0xEA020000 | #define EXTATTR_MAGIC 0xEA020000 | ||||
/* Max EA name length */ | |||||
#define EXT2_EXTATTR_NAMELEN_MAX 255 | |||||
/* EA hash constants */ | |||||
#define EXT2_EXTATTR_NAME_HASH_SHIFT 5 | |||||
#define EXT2_EXTATTR_VALUE_HASH_SHIFT 16 | |||||
#define EXT2_EXTATTR_BLOCK_HASH_SHIFT 16 | |||||
struct ext2fs_extattr_header { | struct ext2fs_extattr_header { | ||||
int32_t h_magic; /* magic number for identification */ | int32_t h_magic; /* magic number for identification */ | ||||
int32_t h_refcount; /* reference count */ | int32_t h_refcount; /* reference count */ | ||||
int32_t h_blocks; /* number of disk blocks used */ | int32_t h_blocks; /* number of disk blocks used */ | ||||
int32_t h_hash; /* hash value of all attributes */ | int32_t h_hash; /* hash value of all attributes */ | ||||
uint32_t h_reserved[4]; /* zero right now */ | uint32_t h_reserved[4]; /* zero right now */ | ||||
}; | }; | ||||
struct ext2fs_extattr_dinode_header { | struct ext2fs_extattr_dinode_header { | ||||
Context not available. | |||||
}; | }; | ||||
struct ext2fs_extattr_entry { | struct ext2fs_extattr_entry { | ||||
uint8_t e_name_len; /* length of name */ | uint8_t e_name_len; /* length of name */ | ||||
uint8_t e_name_index; /* attribute name index */ | uint8_t e_name_index; /* attribute name index */ | ||||
uint16_t e_value_offs; /* offset in disk block of value */ | uint16_t e_value_offs; /* offset in disk block of value */ | ||||
uint32_t e_value_block; /* disk block attribute is stored on (n/i) */ | uint32_t e_value_block; /* disk block attribute is stored on (n/i) */ | ||||
uint32_t e_value_size; /* size of attribute value */ | uint32_t e_value_size; /* size of attribute value */ | ||||
uint32_t e_hash; /* hash value of name and value */ | uint32_t e_hash; /* hash value of name and value */ | ||||
char e_name[0]; /* attribute name */ | char e_name[0]; /* attribute name */ | ||||
}; | }; | ||||
#define EXT2_IHDR(inode, raw_inode) \ | |||||
((struct ext4_xattr_ibody_header *) \ | |||||
((void *)raw_inode + \ | |||||
EXT4_GOOD_OLD_INODE_SIZE + \ | |||||
EXT4_I(inode)->i_extra_isize)) | |||||
#define EXT2_IFIRST(hdr) ((struct ext2fs_extattr_entry *)((hdr)+1)) | #define EXT2_IFIRST(hdr) ((struct ext2fs_extattr_entry *)((hdr)+1)) | ||||
#define EXT2_HDR(bh) ((struct ext2fs_extattr_header *)((bh)->b_data)) | #define EXT2_HDR(bh) ((struct ext2fs_extattr_header *)((bh)->b_data)) | ||||
Context not available. | |||||
(((name_len) + EXT2_EXTATTR_ROUND + \ | (((name_len) + EXT2_EXTATTR_ROUND + \ | ||||
sizeof(struct ext2fs_extattr_entry)) & ~EXT2_EXTATTR_ROUND) | sizeof(struct ext2fs_extattr_entry)) & ~EXT2_EXTATTR_ROUND) | ||||
#define EXT2_EXTATTR_SIZE(size) \ | |||||
(((size) + EXT2_EXTATTR_ROUND) & ~EXT2_EXTATTR_ROUND) | |||||
#define EXT2_EXTATTR_NEXT(entry) \ | #define EXT2_EXTATTR_NEXT(entry) \ | ||||
( (struct ext2fs_extattr_entry *)( \ | ( (struct ext2fs_extattr_entry *)( \ | ||||
(char *)(entry) + EXT2_EXTATTR_LEN((entry)->e_name_len)) ) | (char *)(entry) + EXT2_EXTATTR_LEN((entry)->e_name_len)) ) | ||||
int ext2_extattr_inode_list(struct inode *ip, int attrnamespace, | |||||
struct uio *uio, size_t *size); | |||||
int ext2_extattr_block_list(struct inode *ip, int attrnamespace, | #define EXT2_EXTATTR_INODE(ip) \ | ||||
struct uio *uio, size_t *size); | ((EXT2_INODE_SIZE(ip->i_e2fs) != E2FS_REV0_INODE_SIZE) && \ | ||||
(ip->i_ea_len != ip->i_e2fs->e2fs_bsize)) | |||||
#define EXT2_EXTATTR_BLOCK(ip) (1) | |||||
#define EXT2_EXTATTR_INODE_SIZE(ip) (EXT2_EXTATTR_INODE(ip) ? \ | |||||
(ip->i_ea_len - ip->i_e2fs->e2fs_bsize) : 0) | |||||
#define EXT2_EXTATTR_BLOCK_SIZE(ip) (ip->i_e2fs->e2fs_bsize) | |||||
#define EXT2_EXTATTR_INODE_HDR(ip, addr) \ | |||||
(EXT2_EXTATTR_INODE(ip) ? \ | |||||
((struct ext2fs_extattr_dinode_header *)addr) : NULL) | |||||
#define EXT2_EXTATTR_BLOCK_HDR(ip, addr) (EXT2_EXTATTR_BLOCK(ip) ? \ | |||||
(EXT2_EXTATTR_INODE(ip) ? \ | |||||
((struct ext2fs_extattr_header *)(addr + \ | |||||
EXT2_EXTATTR_INODE_SIZE(ip))) : ((struct ext2fs_extattr_header *) \ | |||||
addr)) : NULL) | |||||
int ext2_extattr_check(struct ext2fs_extattr_entry *eae, char *end); | |||||
void ext2_extattr_delete_entry(char *off, struct ext2fs_extattr_entry *feae, | |||||
struct ext2fs_extattr_entry *eae, char *end); | |||||
int ext2_extattr_free(struct inode *ip); | |||||
int ext2_extattr_get_size(struct ext2fs_extattr_entry *feae, | |||||
struct ext2fs_extattr_entry *eeae, int hdr_size, | |||||
int name_len, int new_size); | |||||
void ext2_extattr_rehash(struct ext2fs_extattr_header *hdr, | |||||
struct ext2fs_extattr_entry *eae); | |||||
void ext2_extattr_set_exist_entry(char *off, struct ext2fs_extattr_entry *feae, | |||||
struct ext2fs_extattr_entry *eae, char *end, struct uio *uio); | |||||
int ext2_extattr_inode_get(struct inode *ip, int attrnamespace, | struct ext2fs_extattr_entry *ext2_extattr_set_new_entry(char *off, | ||||
const char *name, struct uio *uio, size_t *size); | struct ext2fs_extattr_entry *feae, const char *name, | ||||
int attrnamespace, char *end, struct uio *uio); | |||||
int ext2_extattr_block_get(struct inode *ip, int attrnamespace, | int ext2_extattr_index_to_bsd(int index); | ||||
const char *name, struct uio *uio, size_t *size); | int ext2_extattr_valid_attrname(int attrnamespace, const char *attrname); | ||||
#endif /* !_FS_EXT2FS_EXT2_EXTARTTR_H_ */ | #endif /* !_FS_EXT2FS_EXT2_EXTARTTR_H_ */ | ||||
Context not available. |