]>
Commit | Line | Data |
---|---|---|
ac27a0ec | 1 | /* |
617ba13b | 2 | File: fs/ext4/acl.h |
ac27a0ec DK |
3 | |
4 | (C) 2001 Andreas Gruenbacher, <[email protected]> | |
5 | */ | |
6 | ||
7 | #include <linux/posix_acl_xattr.h> | |
8 | ||
617ba13b | 9 | #define EXT4_ACL_VERSION 0x0001 |
ac27a0ec DK |
10 | |
11 | typedef struct { | |
12 | __le16 e_tag; | |
13 | __le16 e_perm; | |
14 | __le32 e_id; | |
617ba13b | 15 | } ext4_acl_entry; |
ac27a0ec DK |
16 | |
17 | typedef struct { | |
18 | __le16 e_tag; | |
19 | __le16 e_perm; | |
617ba13b | 20 | } ext4_acl_entry_short; |
ac27a0ec DK |
21 | |
22 | typedef struct { | |
23 | __le32 a_version; | |
617ba13b | 24 | } ext4_acl_header; |
ac27a0ec | 25 | |
617ba13b | 26 | static inline size_t ext4_acl_size(int count) |
ac27a0ec DK |
27 | { |
28 | if (count <= 4) { | |
617ba13b MC |
29 | return sizeof(ext4_acl_header) + |
30 | count * sizeof(ext4_acl_entry_short); | |
ac27a0ec | 31 | } else { |
617ba13b MC |
32 | return sizeof(ext4_acl_header) + |
33 | 4 * sizeof(ext4_acl_entry_short) + | |
34 | (count - 4) * sizeof(ext4_acl_entry); | |
ac27a0ec DK |
35 | } |
36 | } | |
37 | ||
617ba13b | 38 | static inline int ext4_acl_count(size_t size) |
ac27a0ec DK |
39 | { |
40 | ssize_t s; | |
617ba13b MC |
41 | size -= sizeof(ext4_acl_header); |
42 | s = size - 4 * sizeof(ext4_acl_entry_short); | |
ac27a0ec | 43 | if (s < 0) { |
617ba13b | 44 | if (size % sizeof(ext4_acl_entry_short)) |
ac27a0ec | 45 | return -1; |
617ba13b | 46 | return size / sizeof(ext4_acl_entry_short); |
ac27a0ec | 47 | } else { |
617ba13b | 48 | if (s % sizeof(ext4_acl_entry)) |
ac27a0ec | 49 | return -1; |
617ba13b | 50 | return s / sizeof(ext4_acl_entry) + 4; |
ac27a0ec DK |
51 | } |
52 | } | |
53 | ||
03010a33 | 54 | #ifdef CONFIG_EXT4_FS_POSIX_ACL |
ac27a0ec | 55 | |
ac27a0ec | 56 | /* acl.c */ |
1d5ccd1c | 57 | extern int ext4_check_acl(struct inode *, int); |
af5bc92d TT |
58 | extern int ext4_acl_chmod(struct inode *); |
59 | extern int ext4_init_acl(handle_t *, struct inode *, struct inode *); | |
ac27a0ec | 60 | |
03010a33 | 61 | #else /* CONFIG_EXT4_FS_POSIX_ACL */ |
ac27a0ec | 62 | #include <linux/sched.h> |
1d5ccd1c | 63 | #define ext4_check_acl NULL |
ac27a0ec DK |
64 | |
65 | static inline int | |
617ba13b | 66 | ext4_acl_chmod(struct inode *inode) |
ac27a0ec DK |
67 | { |
68 | return 0; | |
69 | } | |
70 | ||
71 | static inline int | |
617ba13b | 72 | ext4_init_acl(handle_t *handle, struct inode *inode, struct inode *dir) |
ac27a0ec DK |
73 | { |
74 | return 0; | |
75 | } | |
03010a33 | 76 | #endif /* CONFIG_EXT4_FS_POSIX_ACL */ |
ac27a0ec | 77 |