1 /*
2 libparted
3 Copyright (C) 1998, 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 TRAVERSE_H_INCLUDED
20 #define TRAVERSE_H_INCLUDED
21
22 #include "fatio.h"
23
24 typedef struct _FatTraverseInfo FatTraverseInfo;
25
26 struct _FatTraverseInfo {
27 PedFileSystem* fs;
28 char* dir_name;
29
30 int is_legacy_root_dir;
31 int dirty;
32 int eof;
33
34 FatDirEntry* dir_entries;
35 int current_entry;
36 FatCluster this_buffer, next_buffer;
37 int buffer_size;
38 };
39
40 extern int fat_traverse_entries_per_buffer (FatTraverseInfo* trav_info);
41
42 /* starts traversal at an arbitary cluster. if start_cluster==0, then uses
43 root directory */
44 extern FatTraverseInfo* fat_traverse_begin (PedFileSystem* fs,
45 FatCluster start_cluster, char* dir_name);
46
47 extern int fat_traverse_complete (FatTraverseInfo* trav_info);
48
49 extern FatTraverseInfo* fat_traverse_directory (FatTraverseInfo* trav_info,
50 FatDirEntry* parent);
51
52 extern void fat_traverse_mark_dirty (FatTraverseInfo* trav_info);
53
54 extern FatDirEntry* fat_traverse_next_dir_entry (FatTraverseInfo* trav_info);
55
56 extern FatCluster fat_dir_entry_get_first_cluster (FatDirEntry* dir_entry,
57 PedFileSystem* fs);
58
59 extern void fat_dir_entry_set_first_cluster (FatDirEntry* dir_entry,
60 PedFileSystem* fs, FatCluster cluster);
61
62 extern uint32_t fat_dir_entry_get_length (FatDirEntry* dir_entry);
63
64 extern int fat_dir_entry_is_null_term (const FatDirEntry* dir_entry);
65 extern int fat_dir_entry_is_file (FatDirEntry* dir_entry);
66 extern int fat_dir_entry_is_system_file (FatDirEntry* dir_entry);
67 extern int fat_dir_entry_is_directory (FatDirEntry* dir_entry);
68 extern void fat_dir_entry_get_name (FatDirEntry* dir_entry, char* result);
69 extern int fat_dir_entry_is_active (FatDirEntry* dir_entry);
70 extern int fat_dir_entry_has_first_cluster (FatDirEntry* dir_entry,
71 PedFileSystem* fs);
72
73 #endif /* TRAVERSE_H_INCLUDED */