1 #include <sys/types.h>
2 
3 #ifndef _SYSTEM_EXTRAS_EXT4_UTILS_XATTR_H
4 #define _SYSTEM_EXTRAS_EXT4_UTILS_XATTR_H 1
5 
6 #define EXT4_XATTR_MAGIC 0xEA020000
7 #define EXT4_XATTR_INDEX_SECURITY 6
8 
9 struct ext4_xattr_header {
10     __le32  h_magic;
11     __le32  h_refcount;
12     __le32  h_blocks;
13     __le32  h_hash;
14     __le32  h_checksum;
15     __u32   h_reserved[3];
16 };
17 
18 struct ext4_xattr_ibody_header {
19     __le32  h_magic;
20 };
21 
22 struct ext4_xattr_entry {
23     __u8 e_name_len;
24     __u8 e_name_index;
25     __le16 e_value_offs;
26     __le32 e_value_block;
27     __le32 e_value_size;
28     __le32 e_hash;
29     char e_name[0];
30 };
31 
32 #define EXT4_XATTR_PAD_BITS 2
33 #define EXT4_XATTR_PAD (1<<EXT4_XATTR_PAD_BITS)
34 #define EXT4_XATTR_ROUND (EXT4_XATTR_PAD-1)
35 #define EXT4_XATTR_LEN(name_len) \
36     (((name_len) + EXT4_XATTR_ROUND + \
37     sizeof(struct ext4_xattr_entry)) & ~EXT4_XATTR_ROUND)
38 #define EXT4_XATTR_NEXT(entry) \
39     ((struct ext4_xattr_entry *)( \
40      (char *)(entry) + EXT4_XATTR_LEN((entry)->e_name_len)))
41 #define EXT4_XATTR_SIZE(size) \
42     (((size) + EXT4_XATTR_ROUND) & ~EXT4_XATTR_ROUND)
43 #define IS_LAST_ENTRY(entry) (*(uint32_t *)(entry) == 0)
44 
45 #endif /* !_SYSTEM_EXTRAS_EXT4_UTILS_XATTR_H */
46