VisionFive2 Linux kernel

StarFive Tech Linux Kernel for VisionFive (JH7110) boards (mirror)

More than 9999 Commits   32 Branches   54 Tags
b24413180f560 (Greg Kroah-Hartman 2017-11-01 15:07:57 +0100   1) /* SPDX-License-Identifier: GPL-2.0 */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700   2) /*
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700   3)  *  linux/include/linux/hfsplus_raw.h
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700   4)  *
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700   5)  * Copyright (C) 1999
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700   6)  * Brad Boyer (flar@pants.nu)
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700   7)  * (C) 2003 Ardis Technologies <roman@ardistech.com>
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700   8)  *
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700   9)  * Format of structures on disk
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  10)  * Information taken from Apple Technote #1150 (HFS Plus Volume Format)
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  11)  *
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  12)  */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  13) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  14) #ifndef _LINUX_HFSPLUS_RAW_H
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  15) #define _LINUX_HFSPLUS_RAW_H
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  16) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  17) #include <linux/types.h>
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  18) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  19) /* Some constants */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  20) #define HFSPLUS_SECTOR_SIZE        512
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  21) #define HFSPLUS_SECTOR_SHIFT         9
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  22) #define HFSPLUS_VOLHEAD_SECTOR       2
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  23) #define HFSPLUS_VOLHEAD_SIG     0x482b
2179d372d9f8b (David Elliott      2006-01-18 17:43:08 -0800  24) #define HFSPLUS_VOLHEAD_SIGX    0x4858
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  25) #define HFSPLUS_SUPER_MAGIC     0x482b
2179d372d9f8b (David Elliott      2006-01-18 17:43:08 -0800  26) #define HFSPLUS_MIN_VERSION          4
2179d372d9f8b (David Elliott      2006-01-18 17:43:08 -0800  27) #define HFSPLUS_CURRENT_VERSION      5
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  28) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  29) #define HFSP_WRAP_MAGIC         0x4244
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  30) #define HFSP_WRAP_ATTRIB_SLOCK  0x8000
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  31) #define HFSP_WRAP_ATTRIB_SPARED 0x0200
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  32) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  33) #define HFSP_WRAPOFF_SIG          0x00
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  34) #define HFSP_WRAPOFF_ATTRIB       0x0A
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  35) #define HFSP_WRAPOFF_ABLKSIZE     0x14
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  36) #define HFSP_WRAPOFF_ABLKSTART    0x1C
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  37) #define HFSP_WRAPOFF_EMBEDSIG     0x7C
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  38) #define HFSP_WRAPOFF_EMBEDEXT     0x7E
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  39) 
2753cc281c9a0 (Anton Salikhmetov  2010-12-16 18:08:38 +0200  40) #define HFSP_HIDDENDIR_NAME \
2753cc281c9a0 (Anton Salikhmetov  2010-12-16 18:08:38 +0200  41) 	"\xe2\x90\x80\xe2\x90\x80\xe2\x90\x80\xe2\x90\x80HFS+ Private Data"
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  42) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  43) #define HFSP_HARDLINK_TYPE	0x686c6e6b	/* 'hlnk' */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  44) #define HFSP_HFSPLUS_CREATOR	0x6866732b	/* 'hfs+' */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  45) 
6b192832daae6 (Roman Zippel       2006-01-18 17:43:12 -0800  46) #define HFSP_SYMLINK_TYPE	0x736c6e6b	/* 'slnk' */
6b192832daae6 (Roman Zippel       2006-01-18 17:43:12 -0800  47) #define HFSP_SYMLINK_CREATOR	0x72686170	/* 'rhap' */
6b192832daae6 (Roman Zippel       2006-01-18 17:43:12 -0800  48) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  49) #define HFSP_MOUNT_VERSION	0x482b4c78	/* 'H+Lx' */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  50) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  51) /* Structures used on disk */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  52) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  53) typedef __be32 hfsplus_cnid;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  54) typedef __be16 hfsplus_unichr;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  55) 
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800  56) #define HFSPLUS_MAX_STRLEN 255
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800  57) #define HFSPLUS_ATTR_MAX_STRLEN 127
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800  58) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  59) /* A "string" as used in filenames, etc. */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  60) struct hfsplus_unistr {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  61) 	__be16 length;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800  62) 	hfsplus_unichr unicode[HFSPLUS_MAX_STRLEN];
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  63) } __packed;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  64) 
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800  65) /*
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800  66)  * A "string" is used in attributes file
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800  67)  * for name of extended attribute
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800  68)  */
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800  69) struct hfsplus_attr_unistr {
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800  70) 	__be16 length;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800  71) 	hfsplus_unichr unicode[HFSPLUS_ATTR_MAX_STRLEN];
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800  72) } __packed;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  73) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  74) /* POSIX permissions */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  75) struct hfsplus_perm {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  76) 	__be32 owner;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  77) 	__be32 group;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  78) 	u8  rootflags;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  79) 	u8  userflags;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  80) 	__be16 mode;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  81) 	__be32 dev;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  82) } __packed;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  83) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  84) #define HFSPLUS_FLG_NODUMP	0x01
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  85) #define HFSPLUS_FLG_IMMUTABLE	0x02
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  86) #define HFSPLUS_FLG_APPEND	0x04
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  87) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  88) /* A single contiguous area of a file */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  89) struct hfsplus_extent {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  90) 	__be32 start_block;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  91) 	__be32 block_count;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  92) } __packed;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  93) typedef struct hfsplus_extent hfsplus_extent_rec[8];
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  94) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  95) /* Information for a "Fork" in a file */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  96) struct hfsplus_fork_raw {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  97) 	__be64 total_size;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  98) 	__be32 clump_size;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700  99) 	__be32 total_blocks;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 100) 	hfsplus_extent_rec extents;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 101) } __packed;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 102) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 103) /* HFS+ Volume Header */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 104) struct hfsplus_vh {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 105) 	__be16 signature;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 106) 	__be16 version;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 107) 	__be32 attributes;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 108) 	__be32 last_mount_vers;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 109) 	u32 reserved;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 110) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 111) 	__be32 create_date;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 112) 	__be32 modify_date;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 113) 	__be32 backup_date;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 114) 	__be32 checked_date;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 115) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 116) 	__be32 file_count;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 117) 	__be32 folder_count;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 118) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 119) 	__be32 blocksize;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 120) 	__be32 total_blocks;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 121) 	__be32 free_blocks;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 122) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 123) 	__be32 next_alloc;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 124) 	__be32 rsrc_clump_sz;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 125) 	__be32 data_clump_sz;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 126) 	hfsplus_cnid next_cnid;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 127) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 128) 	__be32 write_count;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 129) 	__be64 encodings_bmp;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 130) 
0347b6e95ceeb (Matthew Garrett    2012-02-02 15:39:50 -0500 131) 	u32 finder_info[8];
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 132) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 133) 	struct hfsplus_fork_raw alloc_file;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 134) 	struct hfsplus_fork_raw ext_file;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 135) 	struct hfsplus_fork_raw cat_file;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 136) 	struct hfsplus_fork_raw attr_file;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 137) 	struct hfsplus_fork_raw start_file;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 138) } __packed;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 139) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 140) /* HFS+ volume attributes */
b0b623c3b22d5 (Roman Zippel       2005-11-29 19:34:41 -0800 141) #define HFSPLUS_VOL_UNMNT		(1 << 8)
b0b623c3b22d5 (Roman Zippel       2005-11-29 19:34:41 -0800 142) #define HFSPLUS_VOL_SPARE_BLK		(1 << 9)
b0b623c3b22d5 (Roman Zippel       2005-11-29 19:34:41 -0800 143) #define HFSPLUS_VOL_NOCACHE		(1 << 10)
b0b623c3b22d5 (Roman Zippel       2005-11-29 19:34:41 -0800 144) #define HFSPLUS_VOL_INCNSTNT		(1 << 11)
b0b623c3b22d5 (Roman Zippel       2005-11-29 19:34:41 -0800 145) #define HFSPLUS_VOL_NODEID_REUSED	(1 << 12)
b0b623c3b22d5 (Roman Zippel       2005-11-29 19:34:41 -0800 146) #define HFSPLUS_VOL_JOURNALED		(1 << 13)
b0b623c3b22d5 (Roman Zippel       2005-11-29 19:34:41 -0800 147) #define HFSPLUS_VOL_SOFTLOCK		(1 << 15)
2cd282a1bc6b9 (Sergei Antonov     2014-06-06 14:36:28 -0700 148) #define HFSPLUS_VOL_UNUSED_NODE_FIX	(1 << 31)
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 149) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 150) /* HFS+ BTree node descriptor */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 151) struct hfs_bnode_desc {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 152) 	__be32 next;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 153) 	__be32 prev;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 154) 	s8 type;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 155) 	u8 height;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 156) 	__be16 num_recs;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 157) 	u16 reserved;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 158) } __packed;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 159) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 160) /* HFS+ BTree node types */
74a797d99a9fa (Michael Opdenacker 2013-11-12 15:11:06 -0800 161) #define HFS_NODE_INDEX	0x00	/* An internal (index) node */
74a797d99a9fa (Michael Opdenacker 2013-11-12 15:11:06 -0800 162) #define HFS_NODE_HEADER	0x01	/* The tree header node (node 0) */
74a797d99a9fa (Michael Opdenacker 2013-11-12 15:11:06 -0800 163) #define HFS_NODE_MAP	0x02	/* Holds part of the bitmap of used nodes */
74a797d99a9fa (Michael Opdenacker 2013-11-12 15:11:06 -0800 164) #define HFS_NODE_LEAF	0xFF	/* A leaf (ndNHeight==1) node */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 165) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 166) /* HFS+ BTree header */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 167) struct hfs_btree_header_rec {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 168) 	__be16 depth;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 169) 	__be32 root;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 170) 	__be32 leaf_count;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 171) 	__be32 leaf_head;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 172) 	__be32 leaf_tail;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 173) 	__be16 node_size;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 174) 	__be16 max_key_len;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 175) 	__be32 node_count;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 176) 	__be32 free_nodes;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 177) 	u16 reserved1;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 178) 	__be32 clump_size;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 179) 	u8 btree_type;
2179d372d9f8b (David Elliott      2006-01-18 17:43:08 -0800 180) 	u8 key_type;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 181) 	__be32 attributes;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 182) 	u32 reserved3[16];
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 183) } __packed;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 184) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 185) /* BTree attributes */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 186) #define HFS_TREE_BIGKEYS	2
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 187) #define HFS_TREE_VARIDXKEYS	4
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 188) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 189) /* HFS+ BTree misc info */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 190) #define HFSPLUS_TREE_HEAD 0
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 191) #define HFSPLUS_NODE_MXSZ 32768
099e9245e04d5 (Vyacheslav Dubeyko 2013-11-12 15:11:08 -0800 192) #define HFSPLUS_ATTR_TREE_NODE_SIZE		8192
099e9245e04d5 (Vyacheslav Dubeyko 2013-11-12 15:11:08 -0800 193) #define HFSPLUS_BTREE_HDR_NODE_RECS_COUNT	3
099e9245e04d5 (Vyacheslav Dubeyko 2013-11-12 15:11:08 -0800 194) #define HFSPLUS_BTREE_HDR_USER_BYTES		128
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 195) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 196) /* Some special File ID numbers (stolen from hfs.h) */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 197) #define HFSPLUS_POR_CNID		1	/* Parent Of the Root */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 198) #define HFSPLUS_ROOT_CNID		2	/* ROOT directory */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 199) #define HFSPLUS_EXT_CNID		3	/* EXTents B-tree */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 200) #define HFSPLUS_CAT_CNID		4	/* CATalog B-tree */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 201) #define HFSPLUS_BAD_CNID		5	/* BAD blocks file */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 202) #define HFSPLUS_ALLOC_CNID		6	/* ALLOCation file */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 203) #define HFSPLUS_START_CNID		7	/* STARTup file */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 204) #define HFSPLUS_ATTR_CNID		8	/* ATTRibutes file */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 205) #define HFSPLUS_EXCH_CNID		15	/* ExchangeFiles temp id */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 206) #define HFSPLUS_FIRSTUSER_CNID		16	/* first available user id */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 207) 
2179d372d9f8b (David Elliott      2006-01-18 17:43:08 -0800 208) /* btree key type */
2179d372d9f8b (David Elliott      2006-01-18 17:43:08 -0800 209) #define HFSPLUS_KEY_CASEFOLDING		0xCF	/* case-insensitive */
2179d372d9f8b (David Elliott      2006-01-18 17:43:08 -0800 210) #define HFSPLUS_KEY_BINARY		0xBC	/* case-sensitive */
2179d372d9f8b (David Elliott      2006-01-18 17:43:08 -0800 211) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 212) /* HFS+ catalog entry key */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 213) struct hfsplus_cat_key {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 214) 	__be16 key_len;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 215) 	hfsplus_cnid parent;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 216) 	struct hfsplus_unistr name;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 217) } __packed;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 218) 
9250f925972d0 (Eric Sandeen       2010-10-14 09:53:48 -0400 219) #define HFSPLUS_CAT_KEYLEN	(sizeof(struct hfsplus_cat_key))
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 220) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 221) /* Structs from hfs.h */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 222) struct hfsp_point {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 223) 	__be16 v;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 224) 	__be16 h;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 225) } __packed;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 226) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 227) struct hfsp_rect {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 228) 	__be16 top;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 229) 	__be16 left;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 230) 	__be16 bottom;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 231) 	__be16 right;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 232) } __packed;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 233) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 234) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 235) /* HFS directory info (stolen from hfs.h */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 236) struct DInfo {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 237) 	struct hfsp_rect frRect;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 238) 	__be16 frFlags;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 239) 	struct hfsp_point frLocation;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 240) 	__be16 frView;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 241) } __packed;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 242) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 243) struct DXInfo {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 244) 	struct hfsp_point frScroll;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 245) 	__be32 frOpenChain;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 246) 	__be16 frUnused;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 247) 	__be16 frComment;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 248) 	__be32 frPutAway;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 249) } __packed;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 250) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 251) /* HFS+ folder data (part of an hfsplus_cat_entry) */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 252) struct hfsplus_cat_folder {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 253) 	__be16 type;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 254) 	__be16 flags;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 255) 	__be32 valence;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 256) 	hfsplus_cnid id;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 257) 	__be32 create_date;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 258) 	__be32 content_mod_date;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 259) 	__be32 attribute_mod_date;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 260) 	__be32 access_date;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 261) 	__be32 backup_date;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 262) 	struct hfsplus_perm permissions;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 263) 	struct DInfo user_info;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 264) 	struct DXInfo finder_info;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 265) 	__be32 text_encoding;
d7d673a591701 (Sergei Antonov     2014-03-10 15:49:51 -0700 266) 	__be32 subfolders;	/* Subfolder count in HFSX. Reserved in HFS+. */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 267) } __packed;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 268) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 269) /* HFS file info (stolen from hfs.h) */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 270) struct FInfo {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 271) 	__be32 fdType;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 272) 	__be32 fdCreator;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 273) 	__be16 fdFlags;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 274) 	struct hfsp_point fdLocation;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 275) 	__be16 fdFldr;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 276) } __packed;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 277) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 278) struct FXInfo {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 279) 	__be16 fdIconID;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 280) 	u8 fdUnused[8];
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 281) 	__be16 fdComment;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 282) 	__be32 fdPutAway;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 283) } __packed;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 284) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 285) /* HFS+ file data (part of a cat_entry) */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 286) struct hfsplus_cat_file {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 287) 	__be16 type;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 288) 	__be16 flags;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 289) 	u32 reserved1;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 290) 	hfsplus_cnid id;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 291) 	__be32 create_date;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 292) 	__be32 content_mod_date;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 293) 	__be32 attribute_mod_date;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 294) 	__be32 access_date;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 295) 	__be32 backup_date;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 296) 	struct hfsplus_perm permissions;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 297) 	struct FInfo user_info;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 298) 	struct FXInfo finder_info;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 299) 	__be32 text_encoding;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 300) 	u32 reserved2;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 301) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 302) 	struct hfsplus_fork_raw data_fork;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 303) 	struct hfsplus_fork_raw rsrc_fork;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 304) } __packed;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 305) 
d7d673a591701 (Sergei Antonov     2014-03-10 15:49:51 -0700 306) /* File and folder flag bits */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 307) #define HFSPLUS_FILE_LOCKED		0x0001
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 308) #define HFSPLUS_FILE_THREAD_EXISTS	0x0002
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 309) #define HFSPLUS_XATTR_EXISTS		0x0004
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 310) #define HFSPLUS_ACL_EXISTS		0x0008
d7d673a591701 (Sergei Antonov     2014-03-10 15:49:51 -0700 311) #define HFSPLUS_HAS_FOLDER_COUNT	0x0010	/* Folder has subfolder count
d7d673a591701 (Sergei Antonov     2014-03-10 15:49:51 -0700 312) 						 * (HFSX only) */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 313) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 314) /* HFS+ catalog thread (part of a cat_entry) */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 315) struct hfsplus_cat_thread {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 316) 	__be16 type;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 317) 	s16 reserved;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 318) 	hfsplus_cnid parentID;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 319) 	struct hfsplus_unistr nodeName;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 320) } __packed;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 321) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 322) #define HFSPLUS_MIN_THREAD_SZ 10
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 323) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 324) /* A data record in the catalog tree */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 325) typedef union {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 326) 	__be16 type;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 327) 	struct hfsplus_cat_folder folder;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 328) 	struct hfsplus_cat_file file;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 329) 	struct hfsplus_cat_thread thread;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 330) } __packed hfsplus_cat_entry;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 331) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 332) /* HFS+ catalog entry type */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 333) #define HFSPLUS_FOLDER         0x0001
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 334) #define HFSPLUS_FILE           0x0002
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 335) #define HFSPLUS_FOLDER_THREAD  0x0003
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 336) #define HFSPLUS_FILE_THREAD    0x0004
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 337) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 338) /* HFS+ extents tree key */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 339) struct hfsplus_ext_key {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 340) 	__be16 key_len;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 341) 	u8 fork_type;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 342) 	u8 pad;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 343) 	hfsplus_cnid cnid;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 344) 	__be32 start_block;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 345) } __packed;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 346) 
9250f925972d0 (Eric Sandeen       2010-10-14 09:53:48 -0400 347) #define HFSPLUS_EXT_KEYLEN	sizeof(struct hfsplus_ext_key)
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 348) 
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 349) #define HFSPLUS_XATTR_FINDER_INFO_NAME "com.apple.FinderInfo"
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 350) #define HFSPLUS_XATTR_ACL_NAME "com.apple.system.Security"
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 351) 
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 352) #define HFSPLUS_ATTR_INLINE_DATA 0x10
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 353) #define HFSPLUS_ATTR_FORK_DATA   0x20
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 354) #define HFSPLUS_ATTR_EXTENTS     0x30
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 355) 
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 356) /* HFS+ attributes tree key */
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 357) struct hfsplus_attr_key {
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 358) 	__be16 key_len;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 359) 	__be16 pad;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 360) 	hfsplus_cnid cnid;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 361) 	__be32 start_block;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 362) 	struct hfsplus_attr_unistr key_name;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 363) } __packed;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 364) 
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 365) #define HFSPLUS_ATTR_KEYLEN	sizeof(struct hfsplus_attr_key)
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 366) 
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 367) /* HFS+ fork data attribute */
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 368) struct hfsplus_attr_fork_data {
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 369) 	__be32 record_type;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 370) 	__be32 reserved;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 371) 	struct hfsplus_fork_raw the_fork;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 372) } __packed;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 373) 
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 374) /* HFS+ extension attribute */
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 375) struct hfsplus_attr_extents {
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 376) 	__be32 record_type;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 377) 	__be32 reserved;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 378) 	struct hfsplus_extent extents;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 379) } __packed;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 380) 
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 381) #define HFSPLUS_MAX_INLINE_DATA_SIZE 3802
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 382) 
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 383) /* HFS+ attribute inline data */
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 384) struct hfsplus_attr_inline_data {
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 385) 	__be32 record_type;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 386) 	__be32 reserved1;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 387) 	u8 reserved2[6];
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 388) 	__be16 length;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 389) 	u8 raw_bytes[HFSPLUS_MAX_INLINE_DATA_SIZE];
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 390) } __packed;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 391) 
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 392) /* A data record in the attributes tree */
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 393) typedef union {
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 394) 	__be32 record_type;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 395) 	struct hfsplus_attr_fork_data fork_data;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 396) 	struct hfsplus_attr_extents extents;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 397) 	struct hfsplus_attr_inline_data inline_data;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 398) } __packed hfsplus_attr_entry;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 399) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 400) /* HFS+ generic BTree key */
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 401) typedef union {
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 402) 	__be16 key_len;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 403) 	struct hfsplus_cat_key cat;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 404) 	struct hfsplus_ext_key ext;
9ed083d8ccc61 (Vyacheslav Dubeyko 2013-02-27 17:03:00 -0800 405) 	struct hfsplus_attr_key attr;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 406) } __packed hfsplus_btree_key;
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 407) 
^1da177e4c3f4 (Linus Torvalds     2005-04-16 15:20:36 -0700 408) #endif