Commit 9ed083d8 authored by Vyacheslav Dubeyko's avatar Vyacheslav Dubeyko Committed by Linus Torvalds

hfsplus: add on-disk layout declarations related to attributes tree

Add all necessary on-disk layout declarations related to attributes file.
Signed-off-by: default avatarVyacheslav Dubeyko <slava@dubeyko.com>
Reported-by: default avatarHin-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: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 5841ca09
...@@ -52,13 +52,23 @@ ...@@ -52,13 +52,23 @@
typedef __be32 hfsplus_cnid; typedef __be32 hfsplus_cnid;
typedef __be16 hfsplus_unichr; typedef __be16 hfsplus_unichr;
#define HFSPLUS_MAX_STRLEN 255
#define HFSPLUS_ATTR_MAX_STRLEN 127
/* A "string" as used in filenames, etc. */ /* A "string" as used in filenames, etc. */
struct hfsplus_unistr { struct hfsplus_unistr {
__be16 length; __be16 length;
hfsplus_unichr unicode[255]; hfsplus_unichr unicode[HFSPLUS_MAX_STRLEN];
} __packed; } __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 */ /* POSIX permissions */
struct hfsplus_perm { struct hfsplus_perm {
...@@ -291,6 +301,8 @@ struct hfsplus_cat_file { ...@@ -291,6 +301,8 @@ struct hfsplus_cat_file {
/* File attribute bits */ /* File attribute bits */
#define HFSPLUS_FILE_LOCKED 0x0001 #define HFSPLUS_FILE_LOCKED 0x0001
#define HFSPLUS_FILE_THREAD_EXISTS 0x0002 #define HFSPLUS_FILE_THREAD_EXISTS 0x0002
#define HFSPLUS_XATTR_EXISTS 0x0004
#define HFSPLUS_ACL_EXISTS 0x0008
/* HFS+ catalog thread (part of a cat_entry) */ /* HFS+ catalog thread (part of a cat_entry) */
struct hfsplus_cat_thread { struct hfsplus_cat_thread {
...@@ -327,11 +339,63 @@ struct hfsplus_ext_key { ...@@ -327,11 +339,63 @@ struct hfsplus_ext_key {
#define HFSPLUS_EXT_KEYLEN sizeof(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 */ /* HFS+ generic BTree key */
typedef union { typedef union {
__be16 key_len; __be16 key_len;
struct hfsplus_cat_key cat; struct hfsplus_cat_key cat;
struct hfsplus_ext_key ext; struct hfsplus_ext_key ext;
struct hfsplus_attr_key attr;
} __packed hfsplus_btree_key; } __packed hfsplus_btree_key;
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment