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