Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

503 lines
24 KiB

  1. /*
  2. File: HFSVolumes.h
  3. Contains: On-disk data structures for HFS and HFS Plus volumes.
  4. Version: QuickTime 7.3
  5. Copyright: (c) 2007 (c) 1984-2001 by Apple Computer, Inc. All rights reserved.
  6. Bugs?: For bug reports, consult the following page on
  7. the World Wide Web:
  8. http://developer.apple.com/bugreporter/
  9. */
  10. #ifndef __HFSVOLUMES__
  11. #define __HFSVOLUMES__
  12. #ifndef __MACTYPES__
  13. #include <MacTypes.h>
  14. #endif
  15. #ifndef __FILES__
  16. #include <Files.h>
  17. #endif
  18. #ifndef __FINDER__
  19. #include <Finder.h>
  20. #endif
  21. #if PRAGMA_ONCE
  22. #pragma once
  23. #endif
  24. #if PRAGMA_IMPORT
  25. #pragma import on
  26. #endif
  27. #if PRAGMA_STRUCT_ALIGN
  28. #pragma options align=mac68k
  29. #elif PRAGMA_STRUCT_PACKPUSH
  30. #pragma pack(push, 2)
  31. #elif PRAGMA_STRUCT_PACK
  32. #pragma pack(2)
  33. #endif
  34. /* Signatures used to differentiate between HFS and HFS Plus volumes */
  35. enum {
  36. kHFSSigWord = 0x4244, /* 'BD' in ASCII */
  37. kHFSPlusSigWord = 0x482B, /* 'H+' in ASCII */
  38. kHFSPlusVersion = 0x0004, /* will change as format changes (version 4 shipped with Mac OS 8.1) */
  39. kHFSPlusMountVersion = FOUR_CHAR_CODE('8.10') /* will change as implementations change ('8.10' in Mac OS 8.1) */
  40. };
  41. /* CatalogNodeID is used to track catalog objects */
  42. typedef UInt32 HFSCatalogNodeID;
  43. enum {
  44. kHFSMaxVolumeNameChars = 27,
  45. kHFSMaxFileNameChars = 31,
  46. kHFSPlusMaxFileNameChars = 255
  47. };
  48. /* Extent overflow file data structures */
  49. /* HFS Extent key */
  50. struct HFSExtentKey {
  51. UInt8 keyLength; /* length of key, excluding this field */
  52. UInt8 forkType; /* 0 = data fork, FF = resource fork */
  53. HFSCatalogNodeID fileID; /* file ID */
  54. UInt16 startBlock; /* first file allocation block number in this extent */
  55. };
  56. typedef struct HFSExtentKey HFSExtentKey;
  57. /* HFS Plus Extent key */
  58. struct HFSPlusExtentKey {
  59. UInt16 keyLength; /* length of key, excluding this field */
  60. UInt8 forkType; /* 0 = data fork, FF = resource fork */
  61. UInt8 pad; /* make the other fields align on 32-bit boundary */
  62. HFSCatalogNodeID fileID; /* file ID */
  63. UInt32 startBlock; /* first file allocation block number in this extent */
  64. };
  65. typedef struct HFSPlusExtentKey HFSPlusExtentKey;
  66. /* Number of extent descriptors per extent record */
  67. enum {
  68. kHFSExtentDensity = 3,
  69. kHFSPlusExtentDensity = 8
  70. };
  71. /* HFS extent descriptor */
  72. struct HFSExtentDescriptor {
  73. UInt16 startBlock; /* first allocation block */
  74. UInt16 blockCount; /* number of allocation blocks */
  75. };
  76. typedef struct HFSExtentDescriptor HFSExtentDescriptor;
  77. /* HFS Plus extent descriptor */
  78. struct HFSPlusExtentDescriptor {
  79. UInt32 startBlock; /* first allocation block */
  80. UInt32 blockCount; /* number of allocation blocks */
  81. };
  82. typedef struct HFSPlusExtentDescriptor HFSPlusExtentDescriptor;
  83. /* HFS extent record */
  84. typedef HFSExtentDescriptor HFSExtentRecord[3];
  85. /* HFS Plus extent record */
  86. typedef HFSPlusExtentDescriptor HFSPlusExtentRecord[8];
  87. /* Fork data info (HFS Plus only) - 80 bytes */
  88. struct HFSPlusForkData {
  89. UInt64 logicalSize; /* fork's logical size in bytes */
  90. UInt32 clumpSize; /* fork's clump size in bytes */
  91. UInt32 totalBlocks; /* total blocks used by this fork */
  92. HFSPlusExtentRecord extents; /* initial set of extents */
  93. };
  94. typedef struct HFSPlusForkData HFSPlusForkData;
  95. /* Permissions info (HFS Plus only) - 16 bytes */
  96. struct HFSPlusPermissions {
  97. UInt32 ownerID; /* user or group ID of file/folder owner */
  98. UInt32 groupID; /* additional user of group ID */
  99. UInt32 permissions; /* permissions (bytes: unused, owner, group, everyone) */
  100. UInt32 specialDevice; /* UNIX: device for character or block special file */
  101. };
  102. typedef struct HFSPlusPermissions HFSPlusPermissions;
  103. /* Catalog file data structures */
  104. enum {
  105. kHFSRootParentID = 1, /* Parent ID of the root folder */
  106. kHFSRootFolderID = 2, /* Folder ID of the root folder */
  107. kHFSExtentsFileID = 3, /* File ID of the extents file */
  108. kHFSCatalogFileID = 4, /* File ID of the catalog file */
  109. kHFSBadBlockFileID = 5, /* File ID of the bad allocation block file */
  110. kHFSAllocationFileID = 6, /* File ID of the allocation file (HFS Plus only) */
  111. kHFSStartupFileID = 7, /* File ID of the startup file (HFS Plus only) */
  112. kHFSAttributesFileID = 8, /* File ID of the attribute file (HFS Plus only) */
  113. kHFSBogusExtentFileID = 15, /* Used for exchanging extents in extents file */
  114. kHFSFirstUserCatalogNodeID = 16
  115. };
  116. /* HFS catalog key */
  117. struct HFSCatalogKey {
  118. UInt8 keyLength; /* key length (in bytes) */
  119. UInt8 reserved; /* reserved (set to zero) */
  120. HFSCatalogNodeID parentID; /* parent folder ID */
  121. Str31 nodeName; /* catalog node name */
  122. };
  123. typedef struct HFSCatalogKey HFSCatalogKey;
  124. /* HFS Plus catalog key */
  125. struct HFSPlusCatalogKey {
  126. UInt16 keyLength; /* key length (in bytes) */
  127. HFSCatalogNodeID parentID; /* parent folder ID */
  128. HFSUniStr255 nodeName; /* catalog node name */
  129. };
  130. typedef struct HFSPlusCatalogKey HFSPlusCatalogKey;
  131. /* Catalog record types */
  132. enum {
  133. /* HFS Catalog Records */
  134. kHFSFolderRecord = 0x0100, /* Folder record */
  135. kHFSFileRecord = 0x0200, /* File record */
  136. kHFSFolderThreadRecord = 0x0300, /* Folder thread record */
  137. kHFSFileThreadRecord = 0x0400, /* File thread record */
  138. /* HFS Plus Catalog Records */
  139. kHFSPlusFolderRecord = 1, /* Folder record */
  140. kHFSPlusFileRecord = 2, /* File record */
  141. kHFSPlusFolderThreadRecord = 3, /* Folder thread record */
  142. kHFSPlusFileThreadRecord = 4 /* File thread record */
  143. };
  144. /* Catalog file record flags */
  145. enum {
  146. kHFSFileLockedBit = 0x0000, /* file is locked and cannot be written to */
  147. kHFSFileLockedMask = 0x0001,
  148. kHFSThreadExistsBit = 0x0001, /* a file thread record exists for this file */
  149. kHFSThreadExistsMask = 0x0002
  150. };
  151. /* HFS catalog folder record - 70 bytes */
  152. struct HFSCatalogFolder {
  153. SInt16 recordType; /* record type */
  154. UInt16 flags; /* folder flags */
  155. UInt16 valence; /* folder valence */
  156. HFSCatalogNodeID folderID; /* folder ID */
  157. UInt32 createDate; /* date and time of creation */
  158. UInt32 modifyDate; /* date and time of last modification */
  159. UInt32 backupDate; /* date and time of last backup */
  160. DInfo userInfo; /* Finder information */
  161. DXInfo finderInfo; /* additional Finder information */
  162. UInt32 reserved[4]; /* reserved - set to zero */
  163. };
  164. typedef struct HFSCatalogFolder HFSCatalogFolder;
  165. /* HFS Plus catalog folder record - 88 bytes */
  166. struct HFSPlusCatalogFolder {
  167. SInt16 recordType; /* record type = HFS Plus folder record */
  168. UInt16 flags; /* file flags */
  169. UInt32 valence; /* folder's valence (limited to 2^16 in Mac OS) */
  170. HFSCatalogNodeID folderID; /* folder ID */
  171. UInt32 createDate; /* date and time of creation */
  172. UInt32 contentModDate; /* date and time of last content modification */
  173. UInt32 attributeModDate; /* date and time of last attribute modification */
  174. UInt32 accessDate; /* date and time of last access (Rhapsody only) */
  175. UInt32 backupDate; /* date and time of last backup */
  176. HFSPlusPermissions permissions; /* permissions (for Rhapsody) */
  177. DInfo userInfo; /* Finder information */
  178. DXInfo finderInfo; /* additional Finder information */
  179. UInt32 textEncoding; /* hint for name conversions */
  180. UInt32 reserved; /* reserved - set to zero */
  181. };
  182. typedef struct HFSPlusCatalogFolder HFSPlusCatalogFolder;
  183. /* HFS catalog file record - 102 bytes */
  184. struct HFSCatalogFile {
  185. SInt16 recordType; /* record type */
  186. UInt8 flags; /* file flags */
  187. SInt8 fileType; /* file type (unused ?) */
  188. FInfo userInfo; /* Finder information */
  189. HFSCatalogNodeID fileID; /* file ID */
  190. UInt16 dataStartBlock; /* not used - set to zero */
  191. SInt32 dataLogicalSize; /* logical EOF of data fork */
  192. SInt32 dataPhysicalSize; /* physical EOF of data fork */
  193. UInt16 rsrcStartBlock; /* not used - set to zero */
  194. SInt32 rsrcLogicalSize; /* logical EOF of resource fork */
  195. SInt32 rsrcPhysicalSize; /* physical EOF of resource fork */
  196. UInt32 createDate; /* date and time of creation */
  197. UInt32 modifyDate; /* date and time of last modification */
  198. UInt32 backupDate; /* date and time of last backup */
  199. FXInfo finderInfo; /* additional Finder information */
  200. UInt16 clumpSize; /* file clump size (not used) */
  201. HFSExtentRecord dataExtents; /* first data fork extent record */
  202. HFSExtentRecord rsrcExtents; /* first resource fork extent record */
  203. UInt32 reserved; /* reserved - set to zero */
  204. };
  205. typedef struct HFSCatalogFile HFSCatalogFile;
  206. /* HFS Plus catalog file record - 248 bytes */
  207. struct HFSPlusCatalogFile {
  208. SInt16 recordType; /* record type = HFS Plus file record */
  209. UInt16 flags; /* file flags */
  210. UInt32 reserved1; /* reserved - set to zero */
  211. HFSCatalogNodeID fileID; /* file ID */
  212. UInt32 createDate; /* date and time of creation */
  213. UInt32 contentModDate; /* date and time of last content modification */
  214. UInt32 attributeModDate; /* date and time of last attribute modification */
  215. UInt32 accessDate; /* date and time of last access (Rhapsody only) */
  216. UInt32 backupDate; /* date and time of last backup */
  217. HFSPlusPermissions permissions; /* permissions (for Rhapsody) */
  218. FInfo userInfo; /* Finder information */
  219. FXInfo finderInfo; /* additional Finder information */
  220. UInt32 textEncoding; /* hint for name conversions */
  221. UInt32 reserved2; /* reserved - set to zero */
  222. /* start on double long (64 bit) boundry */
  223. HFSPlusForkData dataFork; /* size and block data for data fork */
  224. HFSPlusForkData resourceFork; /* size and block data for resource fork */
  225. };
  226. typedef struct HFSPlusCatalogFile HFSPlusCatalogFile;
  227. /* HFS catalog thread record - 46 bytes */
  228. struct HFSCatalogThread {
  229. SInt16 recordType; /* record type */
  230. SInt32 reserved[2]; /* reserved - set to zero */
  231. HFSCatalogNodeID parentID; /* parent ID for this catalog node */
  232. Str31 nodeName; /* name of this catalog node */
  233. };
  234. typedef struct HFSCatalogThread HFSCatalogThread;
  235. /* HFS Plus catalog thread record -- 264 bytes */
  236. struct HFSPlusCatalogThread {
  237. SInt16 recordType; /* record type */
  238. SInt16 reserved; /* reserved - set to zero */
  239. HFSCatalogNodeID parentID; /* parent ID for this catalog node */
  240. HFSUniStr255 nodeName; /* name of this catalog node (variable length) */
  241. };
  242. typedef struct HFSPlusCatalogThread HFSPlusCatalogThread;
  243. /*
  244. These are the types of records in the attribute B-tree. The values were chosen
  245. so that they wouldn't conflict with the catalog record types.
  246. */
  247. enum {
  248. kHFSPlusAttrInlineData = 0x10, /* if size < kAttrOverflowSize */
  249. kHFSPlusAttrForkData = 0x20, /* if size >= kAttrOverflowSize */
  250. kHFSPlusAttrExtents = 0x30 /* overflow extents for large attributes */
  251. };
  252. /*
  253. HFSPlusAttrInlineData
  254. For small attributes, whose entire value is stored within this one
  255. B-tree record.
  256. There would not be any other records for this attribute.
  257. */
  258. struct HFSPlusAttrInlineData {
  259. UInt32 recordType; /* = kHFSPlusAttrInlineData*/
  260. UInt32 reserved;
  261. UInt32 logicalSize; /* size in bytes of userData*/
  262. UInt8 userData[2]; /* variable length; space allocated is a multiple of 2 bytes*/
  263. };
  264. typedef struct HFSPlusAttrInlineData HFSPlusAttrInlineData;
  265. /*
  266. HFSPlusAttrForkData
  267. For larger attributes, whose value is stored in allocation blocks.
  268. If the attribute has more than 8 extents, there will be additonal
  269. records (of type HFSPlusAttrExtents) for this attribute.
  270. */
  271. struct HFSPlusAttrForkData {
  272. UInt32 recordType; /* = kHFSPlusAttrForkData*/
  273. UInt32 reserved;
  274. HFSPlusForkData theFork; /* size and first extents of value*/
  275. };
  276. typedef struct HFSPlusAttrForkData HFSPlusAttrForkData;
  277. /*
  278. HFSPlusAttrExtents
  279. This record contains information about overflow extents for large,
  280. fragmented attributes.
  281. */
  282. struct HFSPlusAttrExtents {
  283. UInt32 recordType; /* = kHFSPlusAttrExtents*/
  284. UInt32 reserved;
  285. HFSPlusExtentRecord extents; /* additional extents*/
  286. };
  287. typedef struct HFSPlusAttrExtents HFSPlusAttrExtents;
  288. /* A generic Attribute Record*/
  289. union HFSPlusAttrRecord {
  290. UInt32 recordType;
  291. HFSPlusAttrInlineData inlineData;
  292. HFSPlusAttrForkData forkData;
  293. HFSPlusAttrExtents overflowExtents;
  294. };
  295. typedef union HFSPlusAttrRecord HFSPlusAttrRecord;
  296. /* Key and node lengths */
  297. enum {
  298. kHFSPlusExtentKeyMaximumLength = sizeof(HFSPlusExtentKey) - sizeof(UInt16),
  299. kHFSExtentKeyMaximumLength = sizeof(HFSExtentKey) - sizeof(UInt8),
  300. kHFSPlusCatalogKeyMaximumLength = sizeof(HFSPlusCatalogKey) - sizeof(UInt16),
  301. kHFSPlusCatalogKeyMinimumLength = kHFSPlusCatalogKeyMaximumLength - sizeof(HFSUniStr255) + sizeof(UInt16),
  302. kHFSCatalogKeyMaximumLength = sizeof(HFSCatalogKey) - sizeof(UInt8),
  303. kHFSCatalogKeyMinimumLength = kHFSCatalogKeyMaximumLength - sizeof(Str31) + sizeof(UInt8),
  304. kHFSPlusCatalogMinNodeSize = 4096,
  305. kHFSPlusExtentMinNodeSize = 512,
  306. kHFSPlusAttrMinNodeSize = 4096
  307. };
  308. /* HFS and HFS Plus volume attribute bits */
  309. enum {
  310. /* Bits 0-6 are reserved (always cleared by MountVol call) */
  311. kHFSVolumeHardwareLockBit = 7, /* volume is locked by hardware */
  312. kHFSVolumeUnmountedBit = 8, /* volume was successfully unmounted */
  313. kHFSVolumeSparedBlocksBit = 9, /* volume has bad blocks spared */
  314. kHFSVolumeNoCacheRequiredBit = 10, /* don't cache volume blocks (i.e. RAM or ROM disk) */
  315. kHFSBootVolumeInconsistentBit = 11, /* boot volume is inconsistent (System 7.6 and later) */
  316. /* Bits 12-14 are reserved for future use */
  317. kHFSVolumeSoftwareLockBit = 15, /* volume is locked by software */
  318. kHFSVolumeHardwareLockMask = 1 << kHFSVolumeHardwareLockBit,
  319. kHFSVolumeUnmountedMask = 1 << kHFSVolumeUnmountedBit,
  320. kHFSVolumeSparedBlocksMask = 1 << kHFSVolumeSparedBlocksBit,
  321. kHFSVolumeNoCacheRequiredMask = 1 << kHFSVolumeNoCacheRequiredBit,
  322. kHFSBootVolumeInconsistentMask = 1 << kHFSBootVolumeInconsistentBit,
  323. kHFSVolumeSoftwareLockMask = 1 << kHFSVolumeSoftwareLockBit,
  324. kHFSMDBAttributesMask = 0x8380
  325. };
  326. /* Master Directory Block (HFS only) - 162 bytes */
  327. /* Stored at sector #2 (3rd sector) */
  328. struct HFSMasterDirectoryBlock {
  329. /* These first fields are also used by MFS */
  330. UInt16 drSigWord; /* volume signature */
  331. UInt32 drCrDate; /* date and time of volume creation */
  332. UInt32 drLsMod; /* date and time of last modification */
  333. UInt16 drAtrb; /* volume attributes */
  334. UInt16 drNmFls; /* number of files in root folder */
  335. UInt16 drVBMSt; /* first block of volume bitmap */
  336. UInt16 drAllocPtr; /* start of next allocation search */
  337. UInt16 drNmAlBlks; /* number of allocation blocks in volume */
  338. UInt32 drAlBlkSiz; /* size (in bytes) of allocation blocks */
  339. UInt32 drClpSiz; /* default clump size */
  340. UInt16 drAlBlSt; /* first allocation block in volume */
  341. UInt32 drNxtCNID; /* next unused catalog node ID */
  342. UInt16 drFreeBks; /* number of unused allocation blocks */
  343. Str27 drVN; /* volume name */
  344. /* Master Directory Block extensions for HFS */
  345. UInt32 drVolBkUp; /* date and time of last backup */
  346. UInt16 drVSeqNum; /* volume backup sequence number */
  347. UInt32 drWrCnt; /* volume write count */
  348. UInt32 drXTClpSiz; /* clump size for extents overflow file */
  349. UInt32 drCTClpSiz; /* clump size for catalog file */
  350. UInt16 drNmRtDirs; /* number of directories in root folder */
  351. UInt32 drFilCnt; /* number of files in volume */
  352. UInt32 drDirCnt; /* number of directories in volume */
  353. SInt32 drFndrInfo[8]; /* information used by the Finder */
  354. UInt16 drEmbedSigWord; /* embedded volume signature (formerly drVCSize) */
  355. HFSExtentDescriptor drEmbedExtent; /* embedded volume location and size (formerly drVBMCSize and drCtlCSize) */
  356. UInt32 drXTFlSize; /* size of extents overflow file */
  357. HFSExtentRecord drXTExtRec; /* extent record for extents overflow file */
  358. UInt32 drCTFlSize; /* size of catalog file */
  359. HFSExtentRecord drCTExtRec; /* extent record for catalog file */
  360. };
  361. typedef struct HFSMasterDirectoryBlock HFSMasterDirectoryBlock;
  362. /* HFSPlusVolumeHeader (HFS Plus only) - 512 bytes */
  363. /* Stored at sector #2 (3rd sector) and second-to-last sector. */
  364. struct HFSPlusVolumeHeader {
  365. UInt16 signature; /* volume signature == 'H+' */
  366. UInt16 version; /* current version is kHFSPlusVersion */
  367. UInt32 attributes; /* volume attributes */
  368. UInt32 lastMountedVersion; /* implementation version which last mounted volume */
  369. UInt32 reserved; /* reserved - set to zero */
  370. UInt32 createDate; /* date and time of volume creation */
  371. UInt32 modifyDate; /* date and time of last modification */
  372. UInt32 backupDate; /* date and time of last backup */
  373. UInt32 checkedDate; /* date and time of last disk check */
  374. UInt32 fileCount; /* number of files in volume */
  375. UInt32 folderCount; /* number of directories in volume */
  376. UInt32 blockSize; /* size (in bytes) of allocation blocks */
  377. UInt32 totalBlocks; /* number of allocation blocks in volume (includes this header and VBM*/
  378. UInt32 freeBlocks; /* number of unused allocation blocks */
  379. UInt32 nextAllocation; /* start of next allocation search */
  380. UInt32 rsrcClumpSize; /* default resource fork clump size */
  381. UInt32 dataClumpSize; /* default data fork clump size */
  382. HFSCatalogNodeID nextCatalogID; /* next unused catalog node ID */
  383. UInt32 writeCount; /* volume write count */
  384. UInt64 encodingsBitmap; /* which encodings have been use on this volume */
  385. UInt8 finderInfo[32]; /* information used by the Finder */
  386. HFSPlusForkData allocationFile; /* allocation bitmap file */
  387. HFSPlusForkData extentsFile; /* extents B-tree file */
  388. HFSPlusForkData catalogFile; /* catalog B-tree file */
  389. HFSPlusForkData attributesFile; /* extended attributes B-tree file */
  390. HFSPlusForkData startupFile; /* boot file */
  391. };
  392. typedef struct HFSPlusVolumeHeader HFSPlusVolumeHeader;
  393. /* ---------- HFS and HFS Plus B-tree structures ---------- */
  394. /* BTNodeDescriptor -- Every B-tree node starts with these fields. */
  395. struct BTNodeDescriptor {
  396. UInt32 fLink; /* next node at this level*/
  397. UInt32 bLink; /* previous node at this level*/
  398. SInt8 kind; /* kind of node (leaf, index, header, map)*/
  399. UInt8 height; /* zero for header, map; child is one more than parent*/
  400. UInt16 numRecords; /* number of records in this node*/
  401. UInt16 reserved; /* reserved; set to zero*/
  402. };
  403. typedef struct BTNodeDescriptor BTNodeDescriptor;
  404. /* Constants for BTNodeDescriptor kind */
  405. enum {
  406. kBTLeafNode = -1,
  407. kBTIndexNode = 0,
  408. kBTHeaderNode = 1,
  409. kBTMapNode = 2
  410. };
  411. /* BTHeaderRec -- The first record of a B-tree header node */
  412. struct BTHeaderRec {
  413. UInt16 treeDepth; /* maximum height (usually leaf nodes)*/
  414. UInt32 rootNode; /* node number of root node*/
  415. UInt32 leafRecords; /* number of leaf records in all leaf nodes*/
  416. UInt32 firstLeafNode; /* node number of first leaf node*/
  417. UInt32 lastLeafNode; /* node number of last leaf node*/
  418. UInt16 nodeSize; /* size of a node, in bytes*/
  419. UInt16 maxKeyLength; /* reserved*/
  420. UInt32 totalNodes; /* total number of nodes in tree*/
  421. UInt32 freeNodes; /* number of unused (free) nodes in tree*/
  422. UInt16 reserved1; /* unused*/
  423. UInt32 clumpSize; /* reserved*/
  424. UInt8 btreeType; /* reserved*/
  425. UInt8 reserved2; /* reserved*/
  426. UInt32 attributes; /* persistent attributes about the tree*/
  427. UInt32 reserved3[16]; /* reserved*/
  428. };
  429. typedef struct BTHeaderRec BTHeaderRec;
  430. /* Constants for BTHeaderRec attributes */
  431. enum {
  432. kBTBadCloseMask = 0x00000001, /* reserved*/
  433. kBTBigKeysMask = 0x00000002, /* key length field is 16 bits*/
  434. kBTVariableIndexKeysMask = 0x00000004 /* keys in index nodes are variable length*/
  435. };
  436. #if PRAGMA_STRUCT_ALIGN
  437. #pragma options align=reset
  438. #elif PRAGMA_STRUCT_PACKPUSH
  439. #pragma pack(pop)
  440. #elif PRAGMA_STRUCT_PACK
  441. #pragma pack()
  442. #endif
  443. #ifdef PRAGMA_IMPORT_OFF
  444. #pragma import off
  445. #elif PRAGMA_IMPORT
  446. #pragma import reset
  447. #endif
  448. #endif /* __HFSVOLUMES__ */