hfsplus: add on-disk layout declarations related to attributes tree
Subsystems (2)
Vyacheslav Dubeyko
maintainerPATCH v3 2/5 hfsplus: add on-disk layout declarations related to attributes tree
Hi,
This patch adds all necessary on-disk layout declarations related to attributes file.
With the best regards,
Vyacheslav Dubeyko.
---
From: Vyacheslav Dubeyko <[email protected]>
Subject: [PATCH v3 2/5] hfsplus: add on-disk layout declarations related to attributes tree
This patch adds all necessary on-disk layout declarations related to attributes file.
Reported-by Hin-Tak Leung <[email protected]>
Signed-off-by Vyacheslav Dubeyko <[email protected]>
--- fs/hfsplus/hfsplus_raw.h | 68 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 2 deletions(-)
fs/hfsplus/hfsplus_raw.h +66 -2
@@ -52,13 +52,23 @@typedef __be32 hfsplus_cnid ;typedef __be16 hfsplus_unichr ; +#define HFSPLUS_MAX_STRLEN 255 +#define HFSPLUS_ATTR_MAX_STRLEN 127 +/* A "string" as used in filenames, etc. */ struct hfsplus_unistr {__be16 length; -hfsplus_unichr unicode[255 ]; +hfsplus_unichr unicode[HFSPLUS_MAX_STRLEN ]; } __packed; -#define HFSPLUS_MAX_STRLEN 255 +/* +* A "string" is used in attributes file +* for name of extended attribute +*/ +struct hfsplus_attr_unistr { +__be16 length; +hfsplus_unichr unicode[HFSPLUS_ATTR_MAX_STRLEN ]; +} __packed;/* POSIX permissions */ struct hfsplus_perm {
@@ -291,6 +301,8 @@ struct hfsplus_cat_file {/* File attribute bits */ #define HFSPLUS_FILE_LOCKED 0x0001#define HFSPLUS_FILE_THREAD_EXISTS 0x0002 +#define HFSPLUS_XATTR_EXISTS 0x0004 +#define HFSPLUS_ACL_EXISTS 0x0008/* HFS+ catalog thread (part of a cat_entry) */ struct hfsplus_cat_thread {
@@ -327,11 +339,63 @@ struct hfsplus_ext_key {#define HFSPLUS_EXT_KEYLEN sizeof(struct hfsplus_ext_key) +#define HFSPLUS_XATTR_FINDER_INFO_NAME "com.apple.FinderInfo" +#define HFSPLUS_XATTR_ACL_NAME "com.apple.system.Security" + +#define HFSPLUS_ATTR_INLINE_DATA 0x10 +#define HFSPLUS_ATTR_FORK_DATA 0x20 +#define HFSPLUS_ATTR_EXTENTS 0x30 + +/* HFS+ attributes tree key */ +struct hfsplus_attr_key { +__be16 key_len; +__be16 pad; +hfsplus_cnid cnid; +__be32 start_block; +struct hfsplus_attr_unistr key_name; +} __packed; + +#define HFSPLUS_ATTR_KEYLEN sizeof(struct hfsplus_attr_key) + +/* HFS+ fork data attribute */ +struct hfsplus_attr_fork_data { +__be32 record_type; +__be32 reserved; +struct hfsplus_fork_raw the_fork; +} __packed; + +/* HFS+ extension attribute */ +struct hfsplus_attr_extents { +__be32 record_type; +__be32 reserved; +struct hfsplus_extent extents; +} __packed; + +#define HFSPLUS_MAX_INLINE_DATA_SIZE 3802 + +/* HFS+ attribute inline data */ +struct hfsplus_attr_inline_data { +__be32 record_type; +__be32 reserved1; +u8 reserved2[6 ]; +__be16 length; +u8 raw_bytes[HFSPLUS_MAX_INLINE_DATA_SIZE ]; +} __packed; + +/* A data record in the attributes tree */ +typedef union { +__be32 record_type; +struct hfsplus_attr_fork_data fork_data; +struct hfsplus_attr_extents extents; +struct hfsplus_attr_inline_data inline_data; +} __packed hfsplus_attr_entry; +/* HFS+ generic BTree key */ typedef union {__be16 key_len;struct hfsplus_cat_key cat;struct hfsplus_ext_key ext; +struct hfsplus_attr_key attr; } __packed hfsplus_btree_key;#endif
Signature · 1 line
1.7.9.5