]> git.saurik.com Git - apple/hfs.git/blame - CopyHFSMeta/hfsmeta.h
hfs-195.tar.gz
[apple/hfs.git] / CopyHFSMeta / hfsmeta.h
CommitLineData
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 */
15struct 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};
26typedef struct VolumeDescriptor VolumeDescriptor_t;
27
28/*
29 * The input device description.
30 */
31struct DeviceInfo {
32 char *devname;
33 int fd;
34 off_t size;
35 int blockSize;
36 off_t blockCount;
37};
38typedef struct DeviceInfo DeviceInfo_t;
39
40# define S16(x) OSSwapBigToHostInt16(x)
41# define S32(x) OSSwapBigToHostInt32(x)
42# define S64(x) OSSwapBigToHostInt64(x)
43
44ssize_t GetBlock(DeviceInfo_t*, off_t, uint8_t*);
45int 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 */
56struct 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};
64typedef struct IOWrapper IOWrapper_t;
65
66extern int debug, verbose, printProgress;
67
68#endif /* _HFS_META_H */