Lines Matching defs:trav_info

35 fat_traverse_entries_per_buffer (FatTraverseInfo* trav_info)
37 return trav_info->buffer_size / sizeof (FatDirEntry);
44 is_last_buffer (FatTraverseInfo* trav_info) {
45 FatSpecific* fs_info = FAT_SPECIFIC (trav_info->fs);
47 if (trav_info->is_legacy_root_dir)
50 return fat_table_is_eof (fs_info->fat, trav_info->next_buffer);
54 write_root_dir (FatTraverseInfo* trav_info)
56 FatSpecific* fs_info = FAT_SPECIFIC (trav_info->fs);
58 if (!ped_geometry_write (trav_info->fs->geom, trav_info->dir_entries,
62 if (!ped_geometry_sync (trav_info->fs->geom))
64 trav_info->dirty = 0;
69 write_dir_cluster (FatTraverseInfo* trav_info)
71 if (!fat_write_sync_cluster (trav_info->fs,
72 (void*) trav_info->dir_entries,
73 trav_info->this_buffer))
75 trav_info->dirty = 0;
80 write_dir_buffer (FatTraverseInfo* trav_info)
82 if (trav_info->is_legacy_root_dir)
83 return write_root_dir (trav_info);
85 return write_dir_cluster (trav_info);
89 read_next_dir_buffer (FatTraverseInfo* trav_info)
91 FatSpecific* fs_info = FAT_SPECIFIC (trav_info->fs);
93 PED_ASSERT (!trav_info->is_legacy_root_dir, return 0);
95 trav_info->this_buffer = trav_info->next_buffer;
97 if (trav_info->this_buffer < 2
98 || trav_info->this_buffer >= fs_info->cluster_count + 2) {
103 (long) trav_info->this_buffer,
104 trav_info->dir_name);
108 trav_info->next_buffer
109 = fat_table_get (fs_info->fat, trav_info->this_buffer);
111 return fat_read_cluster (trav_info->fs, (void *) trav_info->dir_entries,
112 trav_info->this_buffer);
117 fat_traverse_mark_dirty (FatTraverseInfo* trav_info)
119 trav_info->dirty = 1;
127 FatTraverseInfo* trav_info;
129 trav_info = (FatTraverseInfo*) ped_malloc (sizeof (FatTraverseInfo));
130 if (!trav_info)
133 trav_info->dir_name = strdup (dir_name);
134 if (!trav_info->dir_name)
137 trav_info->fs = fs;
138 trav_info->is_legacy_root_dir
140 trav_info->dirty = 0;
141 trav_info->eof = 0;
142 trav_info->current_entry = -1;
144 if (trav_info->is_legacy_root_dir) {
145 trav_info->buffer_size = 512 * fs_info->root_dir_sector_count;
147 trav_info->next_buffer = start_cluster;
148 trav_info->buffer_size = fs_info->cluster_size;
151 trav_info->dir_entries
152 = (FatDirEntry*) ped_malloc (trav_info->buffer_size);
153 if (!trav_info->dir_entries)
156 if (trav_info->is_legacy_root_dir) {
157 if (!ped_geometry_read (fs->geom, trav_info->dir_entries,
162 if (!read_next_dir_buffer (trav_info))
166 return trav_info;
169 free (trav_info->dir_entries);
171 free (trav_info->dir_name);
173 free (trav_info);
179 fat_traverse_complete (FatTraverseInfo* trav_info)
181 if (trav_info->dirty) {
182 if (!write_dir_buffer (trav_info))
185 free (trav_info->dir_entries);
186 free (trav_info->dir_name);
187 free (trav_info);
192 fat_traverse_directory (FatTraverseInfo *trav_info, FatDirEntry* parent)
194 strcpy (tmp_buffer, trav_info->dir_name);
196 tmp_buffer + strlen (trav_info->dir_name));
199 return fat_traverse_begin (trav_info->fs,
200 fat_dir_entry_get_first_cluster (parent, trav_info->fs),
205 fat_traverse_next_dir_entry (FatTraverseInfo *trav_info)
207 if (trav_info->eof)
210 trav_info->current_entry++;
211 if (trav_info->current_entry
212 >= fat_traverse_entries_per_buffer (trav_info)) {
213 if (trav_info->dirty) {
214 if (!write_dir_buffer (trav_info))
218 trav_info->current_entry = 0;
219 if (is_last_buffer (trav_info)) {
220 trav_info->eof = 1;
223 if (!read_next_dir_buffer (trav_info))
226 return trav_info->dir_entries + trav_info->current_entry;