]>
Commit | Line | Data |
---|---|---|
a56bdb9d A |
1 | #ifndef _HFS_META_H |
2 | # define _HFS_META_H | |
3 | ||
4 | # include <libkern/OSByteOrder.h> | |
5 | # include <hfs/hfs_format.h> | |
6 | ||
7 | # include "Data.h" | |
8 | ||
9 | /* | |
10 | * The in-core description of the volume. We care about | |
11 | * the primary and alternate header locations, the alternate | |
12 | * and primary journal offset locations, the size of the device, | |
13 | * the two headers, and the two journal info blocks. | |
14 | */ | |
15 | struct VolumeDescriptor { | |
16 | off_t priOffset; // Offset of primary volume header | |
17 | off_t altOffset; // Offset of alternate volume header | |
18 | off_t priJInfoOffset; // Offset of journal info block from primary header | |
19 | off_t altJInfoOffset; // and for the alt. May be the same as the above. | |
20 | off_t deviceSize; // The size of the entire device | |
21 | JournalInfoBlock priJournal; // Primary journal block | |
22 | JournalInfoBlock altJournal; // Alternate journal, if different | |
23 | HFSPlusVolumeHeader priHeader; // The primary header | |
24 | HFSPlusVolumeHeader altHeader; // And the alternate | |
25 | }; | |
26 | typedef struct VolumeDescriptor VolumeDescriptor_t; | |
27 | ||
28 | /* | |
29 | * The input device description. | |
30 | */ | |
31 | struct DeviceInfo { | |
32 | char *devname; | |
33 | int fd; | |
34 | off_t size; | |
35 | int blockSize; | |
36 | off_t blockCount; | |
37 | }; | |
38 | typedef struct DeviceInfo DeviceInfo_t; | |
39 | ||
40 | # define S16(x) OSSwapBigToHostInt16(x) | |
41 | # define S32(x) OSSwapBigToHostInt32(x) | |
42 | # define S64(x) OSSwapBigToHostInt64(x) | |
43 | ||
44 | ssize_t GetBlock(DeviceInfo_t*, off_t, uint8_t*); | |
45 | int ScanExtents(VolumeObjects_t *, int); | |
46 | ||
47 | /* | |
48 | * The IOWrapper structure is used to do input and output on | |
49 | * the target -- which may be a device node, or a sparse bundle. | |
50 | * writer() is used to copy a particular amount of data from the source device; | |
51 | * reader() is used to get some data from the destination device (e.g., the header); | |
52 | * getprog() is used to find what the stored progress was (if any); | |
53 | * setprog() is used to write out the progress status so far. | |
54 | * cleanup() is called when the copy is done. | |
55 | */ | |
56 | struct IOWrapper { | |
57 | ssize_t (*writer)(struct IOWrapper *ctx,DeviceInfo_t *devp, off_t start, off_t len, void (^bp)(off_t)); | |
58 | ssize_t (*reader)(struct IOWrapper *ctx, off_t start, void *buffer, off_t len); | |
59 | off_t (*getprog)(struct IOWrapper *ctx); | |
60 | void (*setprog)(struct IOWrapper *ctx, off_t prog); | |
61 | int (*cleanup)(struct IOWrapper *ctx); | |
62 | void *context; | |
63 | }; | |
64 | typedef struct IOWrapper IOWrapper_t; | |
65 | ||
66 | extern int debug, verbose, printProgress; | |
67 | ||
68 | #endif /* _HFS_META_H */ |