|
|
1.1 root 1: /*
2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7: * Reserved. This file contains Original Code and/or Modifications of
8: * Original Code as defined in and that are subject to the Apple Public
9: * Source License Version 1.1 (the "License"). You may not use this file
10: * except in compliance with the License. Please obtain a copy of the
11: * License at http://www.apple.com/publicsource and read it before using
12: * this file.
13: *
14: * The Original Code and all software distributed under the License are
15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
19: * License for the specific language governing rights and limitations
20: * under the License.
21: *
22: * @APPLE_LICENSE_HEADER_END@
23: */
24:
25: /*
26: File: HFSBtreesPriv.h
27:
28: Contains: On disk B-tree structures for HFS and HFS Plus volumes.
29:
30: Version: HFS Plus 1.0
31:
32: Copyright: � 1997 by Apple Computer, Inc., all rights reserved.
33:
34: File Ownership:
35:
36: DRI: Don Brady
37:
38: Other Contact: Mark Day
39:
40: Technology: File Systems
41:
42: Writers:
43:
44: (djb) Don Brady
45:
46: Change History (most recent first):
47:
48: <CS1> 4/28/97 djb first checked in
49: <HFS2> 3/3/97 djb Added kBTreeHeaderUserBytes constant.
50: <HFS1> 2/19/97 djb first checked in
51: */
52:
53: #ifndef __HFSBTREESPRIV__
54: #define __HFSBTREESPRIV__
55:
56: #if TARGET_OS_MAC
57: #include <Types.h>
58: #else
59: #include "system/MacOSTypes.h"
60: #endif /* TARGET_OS_MAC */
61:
62: //// Node Descriptor - at beginning of each node
63:
64: #if PRAGMA_STRUCT_ALIGN
65: #pragma options align=mac68k
66: #elif PRAGMA_STRUCT_PACKPUSH
67: #pragma pack(push, 2)
68: #elif PRAGMA_STRUCT_PACK
69: #pragma pack(2)
70: #endif
71:
72: struct BTNodeDescriptor {
73: UInt32 fLink; // forward link
74: UInt32 bLink; // backward link
75: SInt8 type; // node type
76: UInt8 height; // node height
77: UInt16 numRecords; // number of records
78: UInt16 reserved; // reserved
79: };
80:
81: typedef struct BTNodeDescriptor BTNodeDescriptor;
82:
83: //#if defined(powerpc) || defined (__powerpc)
84: #pragma options align=reset
85: //#endif
86:
87:
88: //// Node Types
89:
90: typedef enum {
91: kLeafNode = -1,
92: kIndexNode = 0,
93: kHeaderNode = 1,
94: kMapNode = 2
95: } NodeType;
96:
97:
98: //// Header Node Structure (BTNodeDescriptor + Header Record)
99: //#if defined(powerpc) || defined (__powerpc)
100: #pragma options align=mac68k
101: //#endif
102: typedef struct {
103: BTNodeDescriptor node;
104: UInt16 treeDepth;
105: UInt32 rootNode;
106: UInt32 leafRecords;
107: UInt32 firstLeafNode;
108: UInt32 lastLeafNode;
109: UInt16 nodeSize;
110: UInt16 maxKeyLength;
111: UInt32 totalNodes;
112: UInt32 freeNodes;
113: UInt16 reserved1;
114: UInt32 clumpSize; // misalligned
115: UInt8 btreeType;
116: UInt8 reserved2;
117: UInt32 attributes; // long aligned again
118: UInt32 reserved3[16];
119: } HeaderRec, *HeaderPtr;
120:
121:
122: typedef enum {
123: kBTBadCloseMask = 0x00000001,
124: kBTBigKeysMask = 0x00000002,
125: kBTVariableIndexKeysMask = 0x00000004
126: } BTreeAttributes;
127:
128:
129: enum {
130: kBTreeHeaderUserBytes = 128
131:
132: };
133:
134: #if PRAGMA_STRUCT_ALIGN
135: #pragma options align=reset
136: #elif PRAGMA_STRUCT_PACKPUSH
137: #pragma pack(pop)
138: #elif PRAGMA_STRUCT_PACK
139: #pragma pack()
140: #endif
141:
142: #endif //__HFSBTREESPRIV__
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.