1/*
2 * Copyright 2003-2009, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Ingo Weinhold, bonefish@cs.tu-berlin.de
7 */
8
9/*!	\file PartitionMapParser.h
10	\brief Implementation of disk parser for "intel" style partitions.
11
12	Parser reads primary and logical partitions from the disk (according to
13	Master Boot and Extended Boot Records) and fills \c PartitionMap structure
14	with partition representation.
15*/
16#ifndef PARTITION_MAP_PARSER_H
17#define PARTITION_MAP_PARSER_H
18
19
20#include <SupportDefs.h>
21
22
23class Partition;
24class PartitionMap;
25class PrimaryPartition;
26struct partition_table;
27
28class PartitionMapParser {
29public:
30								PartitionMapParser(int deviceFD,
31									off_t sessionOffset, off_t sessionSize,
32									uint32 blockSize);
33								~PartitionMapParser();
34
35			status_t			Parse(const uint8* block, PartitionMap* map);
36
37			int32				CountPartitions() const;
38			const Partition*	PartitionAt(int32 index) const;
39
40private:
41			status_t			_ParsePrimary(const partition_table* table,
42									bool& hadToReFitSize);
43			status_t			_ParseExtended(PrimaryPartition* primary,
44									off_t offset);
45			status_t			_ReadPartitionTable(off_t offset,
46									partition_table* table = NULL);
47
48private:
49			int					fDeviceFD;
50			uint32				fBlockSize;
51			off_t				fSessionOffset;
52			off_t				fSessionSize;
53			partition_table*	fPartitionTable;	// while parsing
54			PartitionMap*		fMap;
55};
56
57#endif	// PARTITION_MAP_PARSER_H
58