Lines Matching full:cluster_num
822 static inline off_t cluster2sector(BDRVVVFATState* s, uint32_t cluster_num)
824 return s->faked_sectors + s->sectors_per_cluster * cluster_num;
1097 * return value is the index of the last mapping for which end>cluster_num
1099 static inline int find_mapping_for_cluster_aux(BDRVVVFATState* s,int cluster_num,int index1,int index2)
1107 if(mapping->begin>=cluster_num) {
1114 return mapping->end<=cluster_num ? index2 : index1;
1119 assert(mapping->begin<=cluster_num);
1122 mapping->end>cluster_num)));
1126 static inline mapping_t* find_mapping_for_cluster(BDRVVVFATState* s,int cluster_num)
1128 int index=find_mapping_for_cluster_aux(s,cluster_num,0,s->mapping.next);
1133 if(mapping->begin>cluster_num)
1135 assert(mapping->begin<=cluster_num && mapping->end>cluster_num);
1175 static inline int read_cluster(BDRVVVFATState *s,int cluster_num)
1177 if(s->current_cluster != cluster_num) {
1182 || s->current_mapping->begin>cluster_num
1183 || s->current_mapping->end<=cluster_num) {
1185 mapping_t* mapping=find_mapping_for_cluster(s,cluster_num);
1187 assert(!mapping || (cluster_num>=mapping->begin && cluster_num<mapping->end));
1193 offset = s->cluster_size*(cluster_num-s->current_mapping->begin);
1198 s->current_cluster = cluster_num;
1209 offset=s->cluster_size*(cluster_num-s->current_mapping->begin)+s->current_mapping->info.file.offset;
1218 s->current_cluster = cluster_num;
1315 cluster_num=sector/s->sectors_per_cluster;
1316 if(read_cluster(s, cluster_num) != 0) {
1536 static inline int cluster_was_modified(BDRVVVFATState* s, uint32_t cluster_num)
1546 cluster2sector(s, cluster_num) + i, 1, &dummy);
1605 uint32_t cluster_num = begin_of_direntry(direntry);
1614 if (cluster_num == 0)
1621 mapping = find_mapping_for_cluster(s, cluster_num);
1635 schedule_rename(s, cluster_num, strdup(path));
1638 schedule_new_file(s, strdup(path), cluster_num);
1647 if (!copy_it && cluster_was_modified(s, cluster_num)) {
1649 mapping->begin > cluster_num ||
1650 mapping->end <= cluster_num)
1651 mapping = find_mapping_for_cluster(s, cluster_num);
1659 * (cluster_num - mapping->begin)) {
1691 int64_t offset = cluster2sector(s, cluster_num);
1708 if (s->used_clusters[cluster_num] & USED_ANY)
1710 s->used_clusters[cluster_num] = USED_FILE;
1712 cluster_num = modified_fat_get(s, cluster_num);
1714 if (fat_eof(s, cluster_num))
1716 else if (cluster_num < 2 || cluster_num > s->max_fat_value - 16)
1729 int cluster_num, const char* path)
1734 mapping_t* mapping = find_mapping_for_cluster(s, cluster_num);
1755 schedule_rename(s, cluster_num, strdup(path));
1758 schedule_mkdir(s, cluster_num, strdup(path));
1767 if (s->used_clusters[cluster_num] & USED_ANY) {
1768 fprintf(stderr, "cluster %d used more than once\n", (int)cluster_num);
1771 s->used_clusters[cluster_num] = USED_DIRECTORY;
1773 DLOG(fprintf(stderr, "read cluster %d (sector %d)\n", (int)cluster_num, (int)cluster2sector(s, cluster_num)));
1774 subret = vvfat_read(s->bs, cluster2sector(s, cluster_num), cluster,
1844 cluster_num = modified_fat_get(s, cluster_num);
1845 } while(!fat_eof(s, cluster_num));