]>
Commit | Line | Data |
---|---|---|
de8ee011 A |
1 | /* Copyright © 2017-2018 Apple Inc. All rights reserved. |
2 | * | |
3 | * lf_hfs_endian.h | |
4 | * livefiles_hfs | |
5 | * | |
6 | * Created by Or Haimovich on 18/3/18. | |
7 | */ | |
8 | ||
9 | #ifndef lf_hfs_endian_h | |
10 | #define lf_hfs_endian_h | |
11 | ||
12 | #include <stdio.h> | |
13 | #include "lf_hfs_btrees_internal.h" | |
14 | ||
15 | ||
16 | /*********************/ | |
17 | /* BIG ENDIAN Macros */ | |
18 | /*********************/ | |
19 | #define SWAP_BE16(__a) OSSwapBigToHostInt16 (__a) | |
20 | #define SWAP_BE32(__a) OSSwapBigToHostInt32 (__a) | |
21 | #define SWAP_BE64(__a) OSSwapBigToHostInt64 (__a) | |
22 | ||
23 | ||
24 | /* | |
25 | * Constants for the "unswap" argument to hfs_swap_BTNode: | |
26 | */ | |
27 | enum HFSBTSwapDirection { | |
28 | kSwapBTNodeBigToHost = 0, | |
29 | kSwapBTNodeHostToBig = 1, | |
30 | ||
31 | /* | |
32 | * kSwapBTNodeHeaderRecordOnly is used to swap just the header record | |
33 | * of a header node from big endian (on disk) to host endian (in memory). | |
34 | * It does not swap the node descriptor (forward/backward links, record | |
35 | * count, etc.). It assumes the header record is at offset 0x000E. | |
36 | * | |
37 | * Since HFS Plus doesn't have fixed B-tree node sizes, we have to read | |
38 | * the header record to determine the actual node size for that tree | |
39 | * before we can set up the B-tree control block. We read it initially | |
40 | * as 512 bytes, then re-read it once we know the correct node size. Since | |
41 | * we may not have read the entire header node the first time, we can't | |
42 | * swap the record offsets, other records, or do most sanity checks. | |
43 | */ | |
44 | kSwapBTNodeHeaderRecordOnly = 3 | |
45 | }; | |
46 | ||
47 | int hfs_swap_BTNode (BlockDescriptor *src, vnode_t vp, enum HFSBTSwapDirection direction, u_int8_t allow_empty_node); | |
48 | ||
49 | ||
50 | #endif /* lf_hfs_endian_h */ |