11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * linux/include/linux/hfsplus_raw.h 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1999 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Brad Boyer (flar@pants.nu) 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * (C) 2003 Ardis Technologies <roman@ardistech.com> 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Format of structures on disk 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Information taken from Apple Technote #1150 (HFS Plus Volume Format) 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _LINUX_HFSPLUS_RAW_H 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _LINUX_HFSPLUS_RAW_H 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/types.h> 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Some constants */ 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_SECTOR_SIZE 512 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_SECTOR_SHIFT 9 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_VOLHEAD_SECTOR 2 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_VOLHEAD_SIG 0x482b 232179d372d9f8b5fc5c189c89bc6a565a42151b23David Elliott#define HFSPLUS_VOLHEAD_SIGX 0x4858 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_SUPER_MAGIC 0x482b 252179d372d9f8b5fc5c189c89bc6a565a42151b23David Elliott#define HFSPLUS_MIN_VERSION 4 262179d372d9f8b5fc5c189c89bc6a565a42151b23David Elliott#define HFSPLUS_CURRENT_VERSION 5 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSP_WRAP_MAGIC 0x4244 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSP_WRAP_ATTRIB_SLOCK 0x8000 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSP_WRAP_ATTRIB_SPARED 0x0200 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSP_WRAPOFF_SIG 0x00 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSP_WRAPOFF_ATTRIB 0x0A 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSP_WRAPOFF_ABLKSIZE 0x14 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSP_WRAPOFF_ABLKSTART 0x1C 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSP_WRAPOFF_EMBEDSIG 0x7C 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSP_WRAPOFF_EMBEDEXT 0x7E 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 392753cc281c9a0e8a0a45ee2b8110866a9fe63bddAnton Salikhmetov#define HFSP_HIDDENDIR_NAME \ 402753cc281c9a0e8a0a45ee2b8110866a9fe63bddAnton Salikhmetov "\xe2\x90\x80\xe2\x90\x80\xe2\x90\x80\xe2\x90\x80HFS+ Private Data" 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSP_HARDLINK_TYPE 0x686c6e6b /* 'hlnk' */ 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSP_HFSPLUS_CREATOR 0x6866732b /* 'hfs+' */ 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 456b192832daae6d141063c49ae1ded6f7dddee50eRoman Zippel#define HFSP_SYMLINK_TYPE 0x736c6e6b /* 'slnk' */ 466b192832daae6d141063c49ae1ded6f7dddee50eRoman Zippel#define HFSP_SYMLINK_CREATOR 0x72686170 /* 'rhap' */ 476b192832daae6d141063c49ae1ded6f7dddee50eRoman Zippel 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSP_MOUNT_VERSION 0x482b4c78 /* 'H+Lx' */ 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Structures used on disk */ 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef __be32 hfsplus_cnid; 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef __be16 hfsplus_unichr; 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 559ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko#define HFSPLUS_MAX_STRLEN 255 569ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko#define HFSPLUS_ATTR_MAX_STRLEN 127 579ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* A "string" as used in filenames, etc. */ 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfsplus_unistr { 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 length; 619ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko hfsplus_unichr unicode[HFSPLUS_MAX_STRLEN]; 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed; 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 649ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko/* 659ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko * A "string" is used in attributes file 669ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko * for name of extended attribute 679ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko */ 689ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeykostruct hfsplus_attr_unistr { 699ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko __be16 length; 709ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko hfsplus_unichr unicode[HFSPLUS_ATTR_MAX_STRLEN]; 719ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko} __packed; 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* POSIX permissions */ 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfsplus_perm { 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 owner; 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 group; 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 rootflags; 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 userflags; 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 mode; 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 dev; 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed; 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_FLG_NODUMP 0x01 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_FLG_IMMUTABLE 0x02 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_FLG_APPEND 0x04 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* A single contiguous area of a file */ 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfsplus_extent { 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 start_block; 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 block_count; 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed; 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct hfsplus_extent hfsplus_extent_rec[8]; 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Information for a "Fork" in a file */ 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfsplus_fork_raw { 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be64 total_size; 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 clump_size; 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 total_blocks; 991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds hfsplus_extent_rec extents; 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed; 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* HFS+ Volume Header */ 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfsplus_vh { 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 signature; 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 version; 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 attributes; 1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 last_mount_vers; 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 reserved; 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 create_date; 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 modify_date; 1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 backup_date; 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 checked_date; 1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 file_count; 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 folder_count; 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 blocksize; 1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 total_blocks; 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 free_blocks; 1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 next_alloc; 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 rsrc_clump_sz; 1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 data_clump_sz; 1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds hfsplus_cnid next_cnid; 1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 write_count; 1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be64 encodings_bmp; 1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1300347b6e95ceeb648631f89a0ced001e90e4daaa9Matthew Garrett u32 finder_info[8]; 1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsplus_fork_raw alloc_file; 1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsplus_fork_raw ext_file; 1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsplus_fork_raw cat_file; 1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsplus_fork_raw attr_file; 1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsplus_fork_raw start_file; 1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed; 1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* HFS+ volume attributes */ 140b0b623c3b22d57d6941b200321779d56c4e79e6bRoman Zippel#define HFSPLUS_VOL_UNMNT (1 << 8) 141b0b623c3b22d57d6941b200321779d56c4e79e6bRoman Zippel#define HFSPLUS_VOL_SPARE_BLK (1 << 9) 142b0b623c3b22d57d6941b200321779d56c4e79e6bRoman Zippel#define HFSPLUS_VOL_NOCACHE (1 << 10) 143b0b623c3b22d57d6941b200321779d56c4e79e6bRoman Zippel#define HFSPLUS_VOL_INCNSTNT (1 << 11) 144b0b623c3b22d57d6941b200321779d56c4e79e6bRoman Zippel#define HFSPLUS_VOL_NODEID_REUSED (1 << 12) 145b0b623c3b22d57d6941b200321779d56c4e79e6bRoman Zippel#define HFSPLUS_VOL_JOURNALED (1 << 13) 146b0b623c3b22d57d6941b200321779d56c4e79e6bRoman Zippel#define HFSPLUS_VOL_SOFTLOCK (1 << 15) 1472cd282a1bc6b9d111b8beee63bea0af735a8a1aaSergei Antonov#define HFSPLUS_VOL_UNUSED_NODE_FIX (1 << 31) 1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* HFS+ BTree node descriptor */ 1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfs_bnode_desc { 1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 next; 1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 prev; 1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds s8 type; 1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 height; 1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 num_recs; 1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 reserved; 1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed; 1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* HFS+ BTree node types */ 16074a797d99a9fa4871ca978ac65e0f3a90dcf84d8Michael Opdenacker#define HFS_NODE_INDEX 0x00 /* An internal (index) node */ 16174a797d99a9fa4871ca978ac65e0f3a90dcf84d8Michael Opdenacker#define HFS_NODE_HEADER 0x01 /* The tree header node (node 0) */ 16274a797d99a9fa4871ca978ac65e0f3a90dcf84d8Michael Opdenacker#define HFS_NODE_MAP 0x02 /* Holds part of the bitmap of used nodes */ 16374a797d99a9fa4871ca978ac65e0f3a90dcf84d8Michael Opdenacker#define HFS_NODE_LEAF 0xFF /* A leaf (ndNHeight==1) node */ 1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* HFS+ BTree header */ 1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfs_btree_header_rec { 1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 depth; 1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 root; 1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 leaf_count; 1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 leaf_head; 1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 leaf_tail; 1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 node_size; 1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 max_key_len; 1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 node_count; 1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 free_nodes; 1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 reserved1; 1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 clump_size; 1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 btree_type; 1792179d372d9f8b5fc5c189c89bc6a565a42151b23David Elliott u8 key_type; 1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 attributes; 1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 reserved3[16]; 1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed; 1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* BTree attributes */ 1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFS_TREE_BIGKEYS 2 1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFS_TREE_VARIDXKEYS 4 1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* HFS+ BTree misc info */ 1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_TREE_HEAD 0 1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_NODE_MXSZ 32768 191099e9245e04d50bb12ed621b4fa61df0a4c9dba9Vyacheslav Dubeyko#define HFSPLUS_ATTR_TREE_NODE_SIZE 8192 192099e9245e04d50bb12ed621b4fa61df0a4c9dba9Vyacheslav Dubeyko#define HFSPLUS_BTREE_HDR_NODE_RECS_COUNT 3 193099e9245e04d50bb12ed621b4fa61df0a4c9dba9Vyacheslav Dubeyko#define HFSPLUS_BTREE_HDR_USER_BYTES 128 1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Some special File ID numbers (stolen from hfs.h) */ 1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_POR_CNID 1 /* Parent Of the Root */ 1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_ROOT_CNID 2 /* ROOT directory */ 1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_EXT_CNID 3 /* EXTents B-tree */ 1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_CAT_CNID 4 /* CATalog B-tree */ 2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_BAD_CNID 5 /* BAD blocks file */ 2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_ALLOC_CNID 6 /* ALLOCation file */ 2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_START_CNID 7 /* STARTup file */ 2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_ATTR_CNID 8 /* ATTRibutes file */ 2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_EXCH_CNID 15 /* ExchangeFiles temp id */ 2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_FIRSTUSER_CNID 16 /* first available user id */ 2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2072179d372d9f8b5fc5c189c89bc6a565a42151b23David Elliott/* btree key type */ 2082179d372d9f8b5fc5c189c89bc6a565a42151b23David Elliott#define HFSPLUS_KEY_CASEFOLDING 0xCF /* case-insensitive */ 2092179d372d9f8b5fc5c189c89bc6a565a42151b23David Elliott#define HFSPLUS_KEY_BINARY 0xBC /* case-sensitive */ 2102179d372d9f8b5fc5c189c89bc6a565a42151b23David Elliott 2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* HFS+ catalog entry key */ 2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfsplus_cat_key { 2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 key_len; 2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds hfsplus_cnid parent; 2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsplus_unistr name; 2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed; 2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2189250f925972d03ccc0c0a4dd4e9b794d2ef6d52bEric Sandeen#define HFSPLUS_CAT_KEYLEN (sizeof(struct hfsplus_cat_key)) 2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Structs from hfs.h */ 2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfsp_point { 2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 v; 2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 h; 2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed; 2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfsp_rect { 2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 top; 2281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 left; 2291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 bottom; 2301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 right; 2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed; 2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* HFS directory info (stolen from hfs.h */ 2351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct DInfo { 2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsp_rect frRect; 2371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 frFlags; 2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsp_point frLocation; 2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 frView; 2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed; 2411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct DXInfo { 2431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsp_point frScroll; 2441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 frOpenChain; 2451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 frUnused; 2461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 frComment; 2471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 frPutAway; 2481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed; 2491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* HFS+ folder data (part of an hfsplus_cat_entry) */ 2511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfsplus_cat_folder { 2521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 type; 2531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 flags; 2541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 valence; 2551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds hfsplus_cnid id; 2561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 create_date; 2571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 content_mod_date; 2581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 attribute_mod_date; 2591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 access_date; 2601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 backup_date; 2611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsplus_perm permissions; 2621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct DInfo user_info; 2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct DXInfo finder_info; 2641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 text_encoding; 265d7d673a591701f131e53d4fd4e2b9352f1316642Sergei Antonov __be32 subfolders; /* Subfolder count in HFSX. Reserved in HFS+. */ 2661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed; 2671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* HFS file info (stolen from hfs.h) */ 2691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct FInfo { 2701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 fdType; 2711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 fdCreator; 2721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 fdFlags; 2731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsp_point fdLocation; 2741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 fdFldr; 2751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed; 2761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct FXInfo { 2781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 fdIconID; 2791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 fdUnused[8]; 2801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 fdComment; 2811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 fdPutAway; 2821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed; 2831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* HFS+ file data (part of a cat_entry) */ 2851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfsplus_cat_file { 2861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 type; 2871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 flags; 2881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 reserved1; 2891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds hfsplus_cnid id; 2901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 create_date; 2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 content_mod_date; 2921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 attribute_mod_date; 2931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 access_date; 2941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 backup_date; 2951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsplus_perm permissions; 2961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct FInfo user_info; 2971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct FXInfo finder_info; 2981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 text_encoding; 2991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 reserved2; 3001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsplus_fork_raw data_fork; 3021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsplus_fork_raw rsrc_fork; 3031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed; 3041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 305d7d673a591701f131e53d4fd4e2b9352f1316642Sergei Antonov/* File and folder flag bits */ 3061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_FILE_LOCKED 0x0001 3071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_FILE_THREAD_EXISTS 0x0002 3089ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko#define HFSPLUS_XATTR_EXISTS 0x0004 3099ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko#define HFSPLUS_ACL_EXISTS 0x0008 310d7d673a591701f131e53d4fd4e2b9352f1316642Sergei Antonov#define HFSPLUS_HAS_FOLDER_COUNT 0x0010 /* Folder has subfolder count 311d7d673a591701f131e53d4fd4e2b9352f1316642Sergei Antonov * (HFSX only) */ 3121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* HFS+ catalog thread (part of a cat_entry) */ 3141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfsplus_cat_thread { 3151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 type; 3161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds s16 reserved; 3171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds hfsplus_cnid parentID; 3181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsplus_unistr nodeName; 3191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed; 3201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_MIN_THREAD_SZ 10 3221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* A data record in the catalog tree */ 3241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef union { 3251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 type; 3261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsplus_cat_folder folder; 3271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsplus_cat_file file; 3281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsplus_cat_thread thread; 3291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed hfsplus_cat_entry; 3301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* HFS+ catalog entry type */ 3321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_FOLDER 0x0001 3331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_FILE 0x0002 3341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_FOLDER_THREAD 0x0003 3351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HFSPLUS_FILE_THREAD 0x0004 3361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* HFS+ extents tree key */ 3381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct hfsplus_ext_key { 3391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 key_len; 3401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 fork_type; 3411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 pad; 3421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds hfsplus_cnid cnid; 3431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be32 start_block; 3441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed; 3451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3469250f925972d03ccc0c0a4dd4e9b794d2ef6d52bEric Sandeen#define HFSPLUS_EXT_KEYLEN sizeof(struct hfsplus_ext_key) 3471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3489ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko#define HFSPLUS_XATTR_FINDER_INFO_NAME "com.apple.FinderInfo" 3499ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko#define HFSPLUS_XATTR_ACL_NAME "com.apple.system.Security" 3509ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko 3519ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko#define HFSPLUS_ATTR_INLINE_DATA 0x10 3529ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko#define HFSPLUS_ATTR_FORK_DATA 0x20 3539ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko#define HFSPLUS_ATTR_EXTENTS 0x30 3549ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko 3559ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko/* HFS+ attributes tree key */ 3569ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeykostruct hfsplus_attr_key { 3579ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko __be16 key_len; 3589ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko __be16 pad; 3599ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko hfsplus_cnid cnid; 3609ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko __be32 start_block; 3619ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko struct hfsplus_attr_unistr key_name; 3629ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko} __packed; 3639ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko 3649ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko#define HFSPLUS_ATTR_KEYLEN sizeof(struct hfsplus_attr_key) 3659ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko 3669ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko/* HFS+ fork data attribute */ 3679ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeykostruct hfsplus_attr_fork_data { 3689ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko __be32 record_type; 3699ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko __be32 reserved; 3709ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko struct hfsplus_fork_raw the_fork; 3719ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko} __packed; 3729ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko 3739ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko/* HFS+ extension attribute */ 3749ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeykostruct hfsplus_attr_extents { 3759ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko __be32 record_type; 3769ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko __be32 reserved; 3779ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko struct hfsplus_extent extents; 3789ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko} __packed; 3799ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko 3809ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko#define HFSPLUS_MAX_INLINE_DATA_SIZE 3802 3819ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko 3829ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko/* HFS+ attribute inline data */ 3839ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeykostruct hfsplus_attr_inline_data { 3849ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko __be32 record_type; 3859ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko __be32 reserved1; 3869ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko u8 reserved2[6]; 3879ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko __be16 length; 3889ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko u8 raw_bytes[HFSPLUS_MAX_INLINE_DATA_SIZE]; 3899ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko} __packed; 3909ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko 3919ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko/* A data record in the attributes tree */ 3929ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeykotypedef union { 3939ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko __be32 record_type; 3949ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko struct hfsplus_attr_fork_data fork_data; 3959ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko struct hfsplus_attr_extents extents; 3969ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko struct hfsplus_attr_inline_data inline_data; 3979ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko} __packed hfsplus_attr_entry; 3989ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko 3991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* HFS+ generic BTree key */ 4001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef union { 4011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __be16 key_len; 4021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsplus_cat_key cat; 4031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct hfsplus_ext_key ext; 4049ed083d8ccc6186448c3558c6f40b40ba0b1568aVyacheslav Dubeyko struct hfsplus_attr_key attr; 4051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __packed hfsplus_btree_key; 4061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 408