1/*
2    libparted
3    Copyright (C) 1999, 2000, 2007 Free Software Foundation, Inc.
4
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 3 of the License, or
8    (at your option) any later version.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program.  If not, see <http://www.gnu.org/licenses/>.
17*/
18
19#ifndef PED_FAT_CONTEXT_H_INCLUDED
20#define PED_FAT_CONTEXT_H_INCLUDED
21
22#include "count.h"
23
24enum _FatDirection {
25	FAT_DIR_FORWARD,
26	FAT_DIR_BACKWARD
27};
28typedef enum _FatDirection FatDirection;
29
30struct _FatOpContext {
31	PedFileSystem*		old_fs;
32	PedFileSystem*		new_fs;
33
34	PedSector		frag_sectors;	/* should equal old_fs and
35						   new_fs's frag_sectors */
36
37	FatDirection		start_move_dir;
38	FatFragment		start_move_delta;
39
40	FatFragment		buffer_offset;
41	FatFragment		buffer_frags;
42	FatFragment*		buffer_map;
43
44	FatFragment		frags_duped;
45
46	FatFragment*		remap;
47
48	FatCluster		new_root_dir [32];
49};
50typedef struct _FatOpContext FatOpContext;
51
52extern FatOpContext* fat_op_context_new (PedFileSystem* new_fs,
53					 PedFileSystem* old_fs);
54
55extern void fat_op_context_destroy (FatOpContext* ctx);
56
57extern FatFragment fat_op_context_map_static_fragment (const FatOpContext* ctx,
58						       FatFragment frag);
59extern FatCluster fat_op_context_map_static_cluster (const FatOpContext* ctx,
60						     FatCluster clst);
61
62extern FatFragment fat_op_context_map_fragment (const FatOpContext* ctx,
63					        FatFragment frag);
64extern FatCluster fat_op_context_map_cluster (const FatOpContext* ctx,
65					      FatCluster clst);
66
67extern int fat_op_context_create_initial_fat (FatOpContext* ctx);
68
69#endif /* PED_FAT_CONTEXT_H_INCLUDED */
70