hfsplus: add on-disk layout declarations related to attributes tree
Add all necessary on-disk layout declarations related to attributes file. Signed-off-by: Vyacheslav Dubeyko <slava@dubeyko.com> Reported-by: Hin-Tak Leung <htl10@users.sourceforge.net> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christoph Hellwig <hch@lst.de> Cc: Jan Kara <jack@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
5841ca09b3
commit
9ed083d8cc
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue