diff options
Diffstat (limited to 'block/vvfat.c')
-rw-r--r-- | block/vvfat.c | 288 |
1 files changed, 144 insertions, 144 deletions
diff --git a/block/vvfat.c b/block/vvfat.c index 6677028ced..063f7318cf 100644 --- a/block/vvfat.c +++ b/block/vvfat.c @@ -71,12 +71,12 @@ void nonono(const char* file, int line, const char* msg) { #endif /* dynamic array functions */ -typedef struct array { +typedef struct array_t { char* pointer; unsigned int size,next,item_size; -} an_array; +} array_t; -static inline void array_init(an_array* array,unsigned int item_size) +static inline void array_init(array_t* array,unsigned int item_size) { array->pointer = NULL; array->size=0; @@ -84,7 +84,7 @@ static inline void array_init(an_array* array,unsigned int item_size) array->item_size=item_size; } -static inline void array_free(an_array* array) +static inline void array_free(array_t* array) { if(array->pointer) free(array->pointer); @@ -92,12 +92,12 @@ static inline void array_free(an_array* array) } /* does not automatically grow */ -static inline void* array_get(an_array* array,unsigned int index) { +static inline void* array_get(array_t* array,unsigned int index) { assert(index < array->next); return array->pointer + index * array->item_size; } -static inline int array_ensure_allocated(an_array* array, int index) +static inline int array_ensure_allocated(array_t* array, int index) { if((index + 1) * array->item_size > array->size) { int new_size = (index + 32) * array->item_size; @@ -111,7 +111,7 @@ static inline int array_ensure_allocated(an_array* array, int index) return 0; } -static inline void* array_get_next(an_array* array) { +static inline void* array_get_next(array_t* array) { unsigned int next = array->next; void* result; @@ -124,7 +124,7 @@ static inline void* array_get_next(an_array* array) { return result; } -static inline void* array_insert(an_array* array,unsigned int index,unsigned int count) { +static inline void* array_insert(array_t* array,unsigned int index,unsigned int count) { if((array->next+count)*array->item_size>array->size) { int increment=count*array->item_size; array->pointer=qemu_realloc(array->pointer,array->size+increment); @@ -141,7 +141,7 @@ static inline void* array_insert(an_array* array,unsigned int index,unsigned int /* this performs a "roll", so that the element which was at index_from becomes * index_to, but the order of all other elements is preserved. */ -static inline int array_roll(an_array* array,int index_to,int index_from,int count) +static inline int array_roll(array_t* array,int index_to,int index_from,int count) { char* buf; char* from; @@ -174,7 +174,7 @@ static inline int array_roll(an_array* array,int index_to,int index_from,int cou return 0; } -static inline int array_remove_slice(an_array* array,int index, int count) +static inline int array_remove_slice(array_t* array,int index, int count) { assert(index >=0); assert(count > 0); @@ -185,13 +185,13 @@ static inline int array_remove_slice(an_array* array,int index, int count) return 0; } -static int array_remove(an_array* array,int index) +static int array_remove(array_t* array,int index) { return array_remove_slice(array, index, 1); } /* return the index for a given member */ -static int array_index(an_array* array, void* pointer) +static int array_index(array_t* array, void* pointer) { size_t offset = (char*)pointer - array->pointer; assert((offset % array->item_size) == 0); @@ -202,7 +202,7 @@ static int array_index(an_array* array, void* pointer) /* These structures are used to fake a disk and the VFAT filesystem. * For this reason we need to use __attribute__((packed)). */ -typedef struct bootsector { +typedef struct bootsector_t { uint8_t jump[3]; uint8_t name[8]; uint16_t sector_size; @@ -238,32 +238,32 @@ typedef struct bootsector { uint8_t fat_type[8]; uint8_t ignored[0x1c0]; uint8_t magic[2]; -} __attribute__((packed)) a_bootsector; +} __attribute__((packed)) bootsector_t; typedef struct { uint8_t head; uint8_t sector; uint8_t cylinder; -} a_mbr_chs; +} mbr_chs_t; -typedef struct partition { +typedef struct partition_t { uint8_t attributes; /* 0x80 = bootable */ - a_mbr_chs start_CHS; + mbr_chs_t start_CHS; uint8_t fs_type; /* 0x1 = FAT12, 0x6 = FAT16, 0xe = FAT16_LBA, 0xb = FAT32, 0xc = FAT32_LBA */ - a_mbr_chs end_CHS; + mbr_chs_t end_CHS; uint32_t start_sector_long; uint32_t length_sector_long; -} __attribute__((packed)) a_partition; +} __attribute__((packed)) partition_t; -typedef struct mbr { +typedef struct mbr_t { uint8_t ignored[0x1b8]; uint32_t nt_id; uint8_t ignored2[2]; - a_partition partition[4]; + partition_t partition[4]; uint8_t magic[2]; -} __attribute__((packed)) a_mbr; +} __attribute__((packed)) mbr_t; -typedef struct direntry { +typedef struct direntry_t { uint8_t name[8]; uint8_t extension[3]; uint8_t attributes; @@ -276,11 +276,11 @@ typedef struct direntry { uint16_t mdate; uint16_t begin; uint32_t size; -} __attribute__((packed)) a_direntry; +} __attribute__((packed)) direntry_t; /* this structure are used to transparently access the files */ -typedef struct mapping { +typedef struct mapping_t { /* begin is the first cluster, end is the last+1 */ uint32_t begin,end; /* as s->directory is growable, no pointer may be used here */ @@ -308,11 +308,11 @@ typedef struct mapping { MODE_DIRECTORY = 4, MODE_FAKED = 8, MODE_DELETED = 16, MODE_RENAMED = 32 } mode; int read_only; -} a_mapping; +} mapping_t; #ifdef DEBUG -static void print_direntry(const struct a_direntry*); -static void print_mapping(const struct a_mapping* mapping); +static void print_direntry(const struct direntry_t*); +static void print_mapping(const struct mapping_t* mapping); #endif /* here begins the real VVFAT driver */ @@ -323,7 +323,7 @@ typedef struct BDRVVVFATState { unsigned char first_sectors[0x40*0x200]; int fat_type; /* 16 or 32 */ - an_array fat,directory,mapping; + array_t fat,directory,mapping; unsigned int cluster_size; unsigned int sectors_per_cluster; @@ -336,7 +336,7 @@ typedef struct BDRVVVFATState { uint32_t max_fat_value; int current_fd; - a_mapping* current_mapping; + mapping_t* current_mapping; unsigned char* cluster; /* points to current cluster */ unsigned char* cluster_buffer; /* points to a buffer to hold temp data */ unsigned int current_cluster; @@ -347,7 +347,7 @@ typedef struct BDRVVVFATState { BlockDriverState* qcow; void* fat2; char* used_clusters; - an_array commits; + array_t commits; const char* path; int downcase_short_names; } BDRVVVFATState; @@ -356,7 +356,7 @@ typedef struct BDRVVVFATState { * if the position is outside the specified geometry, fill maximum value for CHS * and return 1 to signal overflow. */ -static int sector2CHS(BlockDriverState* bs, a_mbr_chs * chs, int spos){ +static int sector2CHS(BlockDriverState* bs, mbr_chs_t * chs, int spos){ int head,sector; sector = spos % (bs->secs); spos/= bs->secs; head = spos % (bs->heads); spos/= bs->heads; @@ -378,8 +378,8 @@ static int sector2CHS(BlockDriverState* bs, a_mbr_chs * chs, int spos){ static void init_mbr(BDRVVVFATState* s) { /* TODO: if the files mbr.img and bootsect.img exist, use them */ - a_mbr* real_mbr=(a_mbr*)s->first_sectors; - a_partition* partition = &(real_mbr->partition[0]); + mbr_t* real_mbr=(mbr_t*)s->first_sectors; + partition_t* partition = &(real_mbr->partition[0]); int lba; memset(s->first_sectors,0,512); @@ -425,12 +425,12 @@ static inline int short2long_name(char* dest,const char* src) return len; } -static inline a_direntry* create_long_filename(BDRVVVFATState* s,const char* filename) +static inline direntry_t* create_long_filename(BDRVVVFATState* s,const char* filename) { char buffer[258]; int length=short2long_name(buffer,filename), number_of_entries=(length+25)/26,i; - a_direntry* entry; + direntry_t* entry; for(i=0;i<number_of_entries;i++) { entry=array_get_next(&(s->directory)); @@ -450,53 +450,53 @@ static inline a_direntry* create_long_filename(BDRVVVFATState* s,const char* fil return array_get(&(s->directory),s->directory.next-number_of_entries); } -static char is_free(const a_direntry* direntry) +static char is_free(const direntry_t* direntry) { return direntry->name[0]==0xe5 || direntry->name[0]==0x00; } -static char is_volume_label(const a_direntry* direntry) +static char is_volume_label(const direntry_t* direntry) { return direntry->attributes == 0x28; } -static char is_long_name(const a_direntry* direntry) +static char is_long_name(const direntry_t* direntry) { return direntry->attributes == 0xf; } -static char is_short_name(const a_direntry* direntry) +static char is_short_name(const direntry_t* direntry) { return !is_volume_label(direntry) && !is_long_name(direntry) && !is_free(direntry); } -static char is_directory(const a_direntry* direntry) +static char is_directory(const direntry_t* direntry) { return direntry->attributes & 0x10 && direntry->name[0] != 0xe5; } -static inline char is_dot(const a_direntry* direntry) +static inline char is_dot(const direntry_t* direntry) { return is_short_name(direntry) && direntry->name[0] == '.'; } -static char is_file(const a_direntry* direntry) +static char is_file(const direntry_t* direntry) { return is_short_name(direntry) && !is_directory(direntry); } -static inline uint32_t begin_of_direntry(const a_direntry* direntry) +static inline uint32_t begin_of_direntry(const direntry_t* direntry) { return le16_to_cpu(direntry->begin)|(le16_to_cpu(direntry->begin_hi)<<16); } -static inline uint32_t filesize_of_direntry(const a_direntry* direntry) +static inline uint32_t filesize_of_direntry(const direntry_t* direntry) { return le32_to_cpu(direntry->size); } -static void set_begin_of_direntry(a_direntry* direntry, uint32_t begin) +static void set_begin_of_direntry(direntry_t* direntry, uint32_t begin) { direntry->begin = cpu_to_le16(begin & 0xffff); direntry->begin_hi = cpu_to_le16((begin >> 16) & 0xffff); @@ -504,7 +504,7 @@ static void set_begin_of_direntry(a_direntry* direntry, uint32_t begin) /* fat functions */ -static inline uint8_t fat_chksum(const a_direntry* entry) +static inline uint8_t fat_chksum(const direntry_t* entry) { uint8_t chksum=0; int i; @@ -603,12 +603,12 @@ static inline void init_fat(BDRVVVFATState* s) /* TODO: in create_short_filename, 0xe5->0x05 is not yet handled! */ /* TODO: in parse_short_filename, 0x05->0xe5 is not yet handled! */ -static inline a_direntry* create_short_and_long_name(BDRVVVFATState* s, +static inline direntry_t* create_short_and_long_name(BDRVVVFATState* s, unsigned int directory_start, const char* filename, int is_dot) { int i,j,long_index=s->directory.next; - a_direntry* entry = NULL; - a_direntry* entry_long = NULL; + direntry_t* entry = NULL; + direntry_t* entry_long = NULL; if(is_dot) { entry=array_get_next(&(s->directory)); @@ -646,7 +646,7 @@ static inline a_direntry* create_short_and_long_name(BDRVVVFATState* s, /* mangle duplicates */ while(1) { - a_direntry* entry1=array_get(&(s->directory),directory_start); + direntry_t* entry1=array_get(&(s->directory),directory_start); int j; for(;entry1<entry;entry1++) @@ -693,12 +693,12 @@ static inline a_direntry* create_short_and_long_name(BDRVVVFATState* s, */ static int read_directory(BDRVVVFATState* s, int mapping_index) { - a_mapping* mapping = array_get(&(s->mapping), mapping_index); - a_direntry* direntry; + mapping_t* mapping = array_get(&(s->mapping), mapping_index); + direntry_t* direntry; const char* dirname = mapping->path; int first_cluster = mapping->begin; int parent_index = mapping->info.dir.parent_mapping_index; - a_mapping* parent_mapping = (a_mapping*) + mapping_t* parent_mapping = (mapping_t*) (parent_index >= 0 ? array_get(&(s->mapping), parent_index) : NULL); int first_cluster_of_parent = parent_mapping ? parent_mapping->begin : -1; @@ -720,7 +720,7 @@ static int read_directory(BDRVVVFATState* s, int mapping_index) while((entry=readdir(dir))) { unsigned int length=strlen(dirname)+2+strlen(entry->d_name); char* buffer; - a_direntry* direntry; + direntry_t* direntry; struct stat st; int is_dot=!strcmp(entry->d_name,"."); int is_dotdot=!strcmp(entry->d_name,".."); @@ -762,7 +762,7 @@ static int read_directory(BDRVVVFATState* s, int mapping_index) /* create mapping for this file */ if(!is_dot && !is_dotdot && (S_ISDIR(st.st_mode) || st.st_size)) { - s->current_mapping=(a_mapping*)array_get_next(&(s->mapping)); + s->current_mapping=(mapping_t*)array_get_next(&(s->mapping)); s->current_mapping->begin=0; s->current_mapping->end=st.st_size; /* @@ -788,8 +788,8 @@ static int read_directory(BDRVVVFATState* s, int mapping_index) /* fill with zeroes up to the end of the cluster */ while(s->directory.next%(0x10*s->sectors_per_cluster)) { - a_direntry* direntry=array_get_next(&(s->directory)); - memset(direntry,0,sizeof(a_direntry)); + direntry_t* direntry=array_get_next(&(s->directory)); + memset(direntry,0,sizeof(direntry_t)); } /* TODO: if there are more entries, bootsector has to be adjusted! */ @@ -799,16 +799,16 @@ static int read_directory(BDRVVVFATState* s, int mapping_index) int cur = s->directory.next; array_ensure_allocated(&(s->directory), ROOT_ENTRIES - 1); memset(array_get(&(s->directory), cur), 0, - (ROOT_ENTRIES - cur) * sizeof(a_direntry)); + (ROOT_ENTRIES - cur) * sizeof(direntry_t)); } /* reget the mapping, since s->mapping was possibly realloc()ed */ - mapping = (a_mapping*)array_get(&(s->mapping), mapping_index); + mapping = (mapping_t*)array_get(&(s->mapping), mapping_index); first_cluster += (s->directory.next - mapping->info.dir.first_dir_index) * 0x20 / s->cluster_size; mapping->end = first_cluster; - direntry = (a_direntry*)array_get(&(s->directory), mapping->dir_index); + direntry = (direntry_t*)array_get(&(s->directory), mapping->dir_index); set_begin_of_direntry(direntry, mapping->begin); return 0; @@ -830,19 +830,19 @@ static inline uint32_t sector_offset_in_cluster(BDRVVVFATState* s,off_t sector_n } #ifdef DBG -static a_direntry* get_direntry_for_mapping(BDRVVVFATState* s,a_mapping* mapping) +static direntry_t* get_direntry_for_mapping(BDRVVVFATState* s,mapping_t* mapping) { if(mapping->mode==MODE_UNDEFINED) return 0; - return (a_direntry*)(s->directory.pointer+sizeof(a_direntry)*mapping->dir_index); + return (direntry_t*)(s->directory.pointer+sizeof(direntry_t)*mapping->dir_index); } #endif static int init_directories(BDRVVVFATState* s, const char* dirname) { - a_bootsector* bootsector; - a_mapping* mapping; + bootsector_t* bootsector; + mapping_t* mapping; unsigned int i; unsigned int cluster; @@ -861,12 +861,12 @@ static int init_directories(BDRVVVFATState* s, i = 1+s->sectors_per_cluster*0x200*8/s->fat_type; s->sectors_per_fat=(s->sector_count+i)/i; /* round up */ - array_init(&(s->mapping),sizeof(a_mapping)); - array_init(&(s->directory),sizeof(a_direntry)); + array_init(&(s->mapping),sizeof(mapping_t)); + array_init(&(s->directory),sizeof(direntry_t)); /* add volume label */ { - a_direntry* entry=array_get_next(&(s->directory)); + direntry_t* entry=array_get_next(&(s->directory)); entry->attributes=0x28; /* archive | volume label */ snprintf((char*)entry->name,11,"QEMU VVFAT"); } @@ -910,7 +910,7 @@ static int init_directories(BDRVVVFATState* s, mapping->mode=MODE_NORMAL; mapping->begin = cluster; if (mapping->end > 0) { - a_direntry* direntry = array_get(&(s->directory), + direntry_t* direntry = array_get(&(s->directory), mapping->dir_index); mapping->end = cluster + 1 + (mapping->end-1)/s->cluster_size; @@ -954,7 +954,7 @@ static int init_directories(BDRVVVFATState* s, s->current_mapping = NULL; - bootsector=(a_bootsector*)(s->first_sectors+(s->first_sectors_number-1)*0x200); + bootsector=(bootsector_t*)(s->first_sectors+(s->first_sectors_number-1)*0x200); bootsector->jump[0]=0xeb; bootsector->jump[1]=0x3e; bootsector->jump[2]=0x90; @@ -1100,7 +1100,7 @@ static inline int find_mapping_for_cluster_aux(BDRVVVFATState* s,int cluster_num { int index3=index1+1; while(1) { - a_mapping* mapping; + mapping_t* mapping; index3=(index1+index2)/2; mapping=array_get(&(s->mapping),index3); assert(mapping->begin < mapping->end); @@ -1123,10 +1123,10 @@ static inline int find_mapping_for_cluster_aux(BDRVVVFATState* s,int cluster_num } } -static inline a_mapping* find_mapping_for_cluster(BDRVVVFATState* s,int cluster_num) +static inline mapping_t* find_mapping_for_cluster(BDRVVVFATState* s,int cluster_num) { int index=find_mapping_for_cluster_aux(s,cluster_num,0,s->mapping.next); - a_mapping* mapping; + mapping_t* mapping; if(index>=s->mapping.next) return NULL; mapping=array_get(&(s->mapping),index); @@ -1140,13 +1140,13 @@ static inline a_mapping* find_mapping_for_cluster(BDRVVVFATState* s,int cluster_ * This function simply compares path == mapping->path. Since the mappings * are sorted by cluster, this is expensive: O(n). */ -static inline a_mapping* find_mapping_for_path(BDRVVVFATState* s, +static inline mapping_t* find_mapping_for_path(BDRVVVFATState* s, const char* path) { int i; for (i = 0; i < s->mapping.next; i++) { - a_mapping* mapping = array_get(&(s->mapping), i); + mapping_t* mapping = array_get(&(s->mapping), i); if (mapping->first_mapping_index < 0 && !strcmp(path, mapping->path)) return mapping; @@ -1155,7 +1155,7 @@ static inline a_mapping* find_mapping_for_path(BDRVVVFATState* s, return NULL; } -static int open_file(BDRVVVFATState* s,a_mapping* mapping) +static int open_file(BDRVVVFATState* s,mapping_t* mapping) { if(!mapping) return -1; @@ -1182,7 +1182,7 @@ static inline int read_cluster(BDRVVVFATState *s,int cluster_num) || s->current_mapping->begin>cluster_num || s->current_mapping->end<=cluster_num) { /* binary search of mappings for file */ - a_mapping* mapping=find_mapping_for_cluster(s,cluster_num); + mapping_t* mapping=find_mapping_for_cluster(s,cluster_num); assert(!mapping || (cluster_num>=mapping->begin && cluster_num<mapping->end)); @@ -1238,7 +1238,7 @@ static void hexdump(const void* address, uint32_t len) } } -static void print_direntry(const a_direntry* direntry) +static void print_direntry(const direntry_t* direntry) { int j = 0; char buffer[1024]; @@ -1270,7 +1270,7 @@ static void print_direntry(const a_direntry* direntry) } } -static void print_mapping(const a_mapping* mapping) +static void print_mapping(const mapping_t* mapping) { fprintf(stderr, "mapping (0x%x): begin, end = %d, %d, dir_index = %d, first_mapping_index = %d, name = %s, mode = 0x%x, " , (int)mapping, mapping->begin, mapping->end, mapping->dir_index, mapping->first_mapping_index, mapping->path, mapping->mode); if (mapping->mode & MODE_DIRECTORY) @@ -1346,7 +1346,7 @@ DLOG(fprintf(stderr, "sector %d not allocated\n", (int)sector_num)); * */ -typedef struct commit { +typedef struct commit_t { char* path; union { struct { uint32_t cluster; } rename; @@ -1358,14 +1358,14 @@ typedef struct commit { enum { ACTION_RENAME, ACTION_WRITEOUT, ACTION_NEW_FILE, ACTION_MKDIR } action; -} a_commit; +} commit_t; static void clear_commits(BDRVVVFATState* s) { int i; DLOG(fprintf(stderr, "clear_commits (%d commits)\n", s->commits.next)); for (i = 0; i < s->commits.next; i++) { - a_commit* commit = array_get(&(s->commits), i); + commit_t* commit = array_get(&(s->commits), i); assert(commit->path || commit->action == ACTION_WRITEOUT); if (commit->action != ACTION_WRITEOUT) { assert(commit->path); @@ -1379,7 +1379,7 @@ DLOG(fprintf(stderr, "clear_commits (%d commits)\n", s->commits.next)); static void schedule_rename(BDRVVVFATState* s, uint32_t cluster, char* new_path) { - a_commit* commit = array_get_next(&(s->commits)); + commit_t* commit = array_get_next(&(s->commits)); commit->path = new_path; commit->param.rename.cluster = cluster; commit->action = ACTION_RENAME; @@ -1388,7 +1388,7 @@ static void schedule_rename(BDRVVVFATState* s, static void schedule_writeout(BDRVVVFATState* s, int dir_index, uint32_t modified_offset) { - a_commit* commit = array_get_next(&(s->commits)); + commit_t* commit = array_get_next(&(s->commits)); commit->path = NULL; commit->param.writeout.dir_index = dir_index; commit->param.writeout.modified_offset = modified_offset; @@ -1398,7 +1398,7 @@ static void schedule_writeout(BDRVVVFATState* s, static void schedule_new_file(BDRVVVFATState* s, char* path, uint32_t first_cluster) { - a_commit* commit = array_get_next(&(s->commits)); + commit_t* commit = array_get_next(&(s->commits)); commit->path = path; commit->param.new_file.first_cluster = first_cluster; commit->action = ACTION_NEW_FILE; @@ -1406,7 +1406,7 @@ static void schedule_new_file(BDRVVVFATState* s, static void schedule_mkdir(BDRVVVFATState* s, uint32_t cluster, char* path) { - a_commit* commit = array_get_next(&(s->commits)); + commit_t* commit = array_get_next(&(s->commits)); commit->path = path; commit->param.mkdir.cluster = cluster; commit->action = ACTION_MKDIR; @@ -1431,7 +1431,7 @@ static void lfn_init(long_file_name* lfn) /* return 0 if parsed successfully, > 0 if no long name, < 0 if error */ static int parse_long_name(long_file_name* lfn, - const a_direntry* direntry) + const direntry_t* direntry) { int i, j, offset; const unsigned char* pointer = (const unsigned char*)direntry; @@ -1474,7 +1474,7 @@ static int parse_long_name(long_file_name* lfn, /* returns 0 if successful, >0 if no short_name, and <0 on error */ static int parse_short_name(BDRVVVFATState* s, - long_file_name* lfn, a_direntry* direntry) + long_file_name* lfn, direntry_t* direntry) { int i, j; @@ -1566,7 +1566,7 @@ static const char* get_basename(const char* path) */ typedef enum { USED_DIRECTORY = 1, USED_FILE = 2, USED_ANY = 3, USED_ALLOCATED = 4 -} e_used; +} used_t; /* * get_cluster_count_for_direntry() not only determines how many clusters @@ -1579,7 +1579,7 @@ typedef enum { * assumed to be *not* deleted (and *only* those). */ static uint32_t get_cluster_count_for_direntry(BDRVVVFATState* s, - a_direntry* direntry, const char* path) + direntry_t* direntry, const char* path) { /* * This is a little bit tricky: @@ -1605,7 +1605,7 @@ static uint32_t get_cluster_count_for_direntry(BDRVVVFATState* s, uint32_t cluster_num = begin_of_direntry(direntry); uint32_t offset = 0; int first_mapping_index = -1; - a_mapping* mapping = NULL; + mapping_t* mapping = NULL; const char* basename2 = NULL; vvfat_close_current_file(s); @@ -1730,8 +1730,8 @@ static int check_directory_consistency(BDRVVVFATState *s, { int ret = 0; unsigned char* cluster = qemu_malloc(s->cluster_size); - a_direntry* direntries = (a_direntry*)cluster; - a_mapping* mapping = find_mapping_for_cluster(s, cluster_num); + direntry_t* direntries = (direntry_t*)cluster; + mapping_t* mapping = find_mapping_for_cluster(s, cluster_num); long_file_name lfn; int path_len = strlen(path); @@ -1889,7 +1889,7 @@ DLOG(checkpoint()); * (check_directory_consistency() will unmark those still present). */ if (s->qcow) for (i = 0; i < s->mapping.next; i++) { - a_mapping* mapping = array_get(&(s->mapping), i); + mapping_t* mapping = array_get(&(s->mapping), i); if (mapping->first_mapping_index < 0) mapping->mode |= MODE_DELETED; } @@ -1929,7 +1929,7 @@ static inline void adjust_mapping_indices(BDRVVVFATState* s, int i; for (i = 0; i < s->mapping.next; i++) { - a_mapping* mapping = array_get(&(s->mapping), i); + mapping_t* mapping = array_get(&(s->mapping), i); #define ADJUST_MAPPING_INDEX(name) \ if (mapping->name >= offset) \ @@ -1942,7 +1942,7 @@ static inline void adjust_mapping_indices(BDRVVVFATState* s, } /* insert or update mapping */ -static a_mapping* insert_mapping(BDRVVVFATState* s, +static mapping_t* insert_mapping(BDRVVVFATState* s, uint32_t begin, uint32_t end) { /* @@ -1953,8 +1953,8 @@ static a_mapping* insert_mapping(BDRVVVFATState* s, * - replace name */ int index = find_mapping_for_cluster_aux(s, begin, 0, s->mapping.next); - a_mapping* mapping = NULL; - a_mapping* first_mapping = array_get(&(s->mapping), 0); + mapping_t* mapping = NULL; + mapping_t* first_mapping = array_get(&(s->mapping), 0); if (index < s->mapping.next && (mapping = array_get(&(s->mapping), index)) && mapping->begin < begin) { @@ -1971,12 +1971,12 @@ static a_mapping* insert_mapping(BDRVVVFATState* s, mapping->begin = begin; mapping->end = end; -DLOG(a_mapping* next_mapping; +DLOG(mapping_t* next_mapping; assert(index + 1 >= s->mapping.next || ((next_mapping = array_get(&(s->mapping), index + 1)) && next_mapping->begin >= end))); - if (s->current_mapping && first_mapping != (a_mapping*)s->mapping.pointer) + if (s->current_mapping && first_mapping != (mapping_t*)s->mapping.pointer) s->current_mapping = array_get(&(s->mapping), s->current_mapping - first_mapping); @@ -1985,8 +1985,8 @@ assert(index + 1 >= s->mapping.next || static int remove_mapping(BDRVVVFATState* s, int mapping_index) { - a_mapping* mapping = array_get(&(s->mapping), mapping_index); - a_mapping* first_mapping = array_get(&(s->mapping), 0); + mapping_t* mapping = array_get(&(s->mapping), mapping_index); + mapping_t* first_mapping = array_get(&(s->mapping), 0); /* free mapping */ if (mapping->first_mapping_index < 0) @@ -1998,7 +1998,7 @@ static int remove_mapping(BDRVVVFATState* s, int mapping_index) /* adjust all references to mappings */ adjust_mapping_indices(s, mapping_index, -1); - if (s->current_mapping && first_mapping != (a_mapping*)s->mapping.pointer) + if (s->current_mapping && first_mapping != (mapping_t*)s->mapping.pointer) s->current_mapping = array_get(&(s->mapping), s->current_mapping - first_mapping); @@ -2009,7 +2009,7 @@ static void adjust_dirindices(BDRVVVFATState* s, int offset, int adjust) { int i; for (i = 0; i < s->mapping.next; i++) { - a_mapping* mapping = array_get(&(s->mapping), i); + mapping_t* mapping = array_get(&(s->mapping), i); if (mapping->dir_index >= offset) mapping->dir_index += adjust; if ((mapping->mode & MODE_DIRECTORY) && @@ -2018,14 +2018,14 @@ static void adjust_dirindices(BDRVVVFATState* s, int offset, int adjust) } } -static a_direntry* insert_direntries(BDRVVVFATState* s, +static direntry_t* insert_direntries(BDRVVVFATState* s, int dir_index, int count) { /* * make room in s->directory, * adjust_dirindices */ - a_direntry* result = array_insert(&(s->directory), dir_index, count); + direntry_t* result = array_insert(&(s->directory), dir_index, count); if (result == NULL) return NULL; adjust_dirindices(s, dir_index, count); @@ -2050,8 +2050,8 @@ static int remove_direntries(BDRVVVFATState* s, int dir_index, int count) static int commit_mappings(BDRVVVFATState* s, uint32_t first_cluster, int dir_index) { - a_mapping* mapping = find_mapping_for_cluster(s, first_cluster); - a_direntry* direntry = array_get(&(s->directory), dir_index); + mapping_t* mapping = find_mapping_for_cluster(s, first_cluster); + direntry_t* direntry = array_get(&(s->directory), dir_index); uint32_t cluster = first_cluster; vvfat_close_current_file(s); @@ -2083,7 +2083,7 @@ static int commit_mappings(BDRVVVFATState* s, if (!fat_eof(s, c1)) { int i = find_mapping_for_cluster_aux(s, c1, 0, s->mapping.next); - a_mapping* next_mapping = i >= s->mapping.next ? NULL : + mapping_t* next_mapping = i >= s->mapping.next ? NULL : array_get(&(s->mapping), i); if (next_mapping == NULL || next_mapping->begin > c1) { @@ -2127,9 +2127,9 @@ static int commit_mappings(BDRVVVFATState* s, static int commit_direntries(BDRVVVFATState* s, int dir_index, int parent_mapping_index) { - a_direntry* direntry = array_get(&(s->directory), dir_index); + direntry_t* direntry = array_get(&(s->directory), dir_index); uint32_t first_cluster = dir_index == 0 ? 0 : begin_of_direntry(direntry); - a_mapping* mapping = find_mapping_for_cluster(s, first_cluster); + mapping_t* mapping = find_mapping_for_cluster(s, first_cluster); int factor = 0x10 * s->sectors_per_cluster; int old_cluster_count, new_cluster_count; @@ -2207,10 +2207,10 @@ DLOG(fprintf(stderr, "commit_direntries for %s, parent_mapping_index %d\n", mapp static int commit_one_file(BDRVVVFATState* s, int dir_index, uint32_t offset) { - a_direntry* direntry = array_get(&(s->directory), dir_index); + direntry_t* direntry = array_get(&(s->directory), dir_index); uint32_t c = begin_of_direntry(direntry); uint32_t first_cluster = c; - a_mapping* mapping = find_mapping_for_cluster(s, c); + mapping_t* mapping = find_mapping_for_cluster(s, c); uint32_t size = filesize_of_direntry(direntry); char* cluster = qemu_malloc(s->cluster_size); uint32_t i; @@ -2268,14 +2268,14 @@ static void check1(BDRVVVFATState* s) { int i; for (i = 0; i < s->mapping.next; i++) { - a_mapping* mapping = array_get(&(s->mapping), i); + mapping_t* mapping = array_get(&(s->mapping), i); if (mapping->mode & MODE_DELETED) { fprintf(stderr, "deleted\n"); continue; } assert(mapping->dir_index >= 0); assert(mapping->dir_index < s->directory.next); - a_direntry* direntry = array_get(&(s->directory), mapping->dir_index); + direntry_t* direntry = array_get(&(s->directory), mapping->dir_index); assert(mapping->begin == begin_of_direntry(direntry) || mapping->first_mapping_index >= 0); if (mapping->mode & MODE_DIRECTORY) { assert(mapping->info.dir.first_dir_index + 0x10 * s->sectors_per_cluster * (mapping->end - mapping->begin) <= s->directory.next); @@ -2291,10 +2291,10 @@ static void check2(BDRVVVFATState* s) int first_mapping = -1; for (i = 0; i < s->directory.next; i++) { - a_direntry* direntry = array_get(&(s->directory), i); + direntry_t* direntry = array_get(&(s->directory), i); if (is_short_name(direntry) && begin_of_direntry(direntry)) { - a_mapping* mapping = find_mapping_for_cluster(s, begin_of_direntry(direntry)); + mapping_t* mapping = find_mapping_for_cluster(s, begin_of_direntry(direntry)); assert(mapping); assert(mapping->dir_index == i || is_dot(direntry)); assert(mapping->begin == begin_of_direntry(direntry) || is_dot(direntry)); @@ -2305,7 +2305,7 @@ static void check2(BDRVVVFATState* s) int j, count = 0; for (j = 0; j < s->mapping.next; j++) { - a_mapping* mapping = array_get(&(s->mapping), j); + mapping_t* mapping = array_get(&(s->mapping), j); if (mapping->mode & MODE_DELETED) continue; if (mapping->mode & MODE_DIRECTORY) { @@ -2318,7 +2318,7 @@ static void check2(BDRVVVFATState* s) if (mapping->info.dir.parent_mapping_index < 0) assert(j == 0); else { - a_mapping* parent = array_get(&(s->mapping), mapping->info.dir.parent_mapping_index); + mapping_t* parent = array_get(&(s->mapping), mapping->info.dir.parent_mapping_index); assert(parent->mode & MODE_DIRECTORY); assert(parent->info.dir.first_dir_index < mapping->info.dir.first_dir_index); } @@ -2339,15 +2339,15 @@ static int handle_renames_and_mkdirs(BDRVVVFATState* s) #ifdef DEBUG fprintf(stderr, "handle_renames\n"); for (i = 0; i < s->commits.next; i++) { - a_commit* commit = array_get(&(s->commits), i); + commit_t* commit = array_get(&(s->commits), i); fprintf(stderr, "%d, %s (%d, %d)\n", i, commit->path ? commit->path : "(null)", commit->param.rename.cluster, commit->action); } #endif for (i = 0; i < s->commits.next;) { - a_commit* commit = array_get(&(s->commits), i); + commit_t* commit = array_get(&(s->commits), i); if (commit->action == ACTION_RENAME) { - a_mapping* mapping = find_mapping_for_cluster(s, + mapping_t* mapping = find_mapping_for_cluster(s, commit->param.rename.cluster); char* old_path = mapping->path; @@ -2360,7 +2360,7 @@ static int handle_renames_and_mkdirs(BDRVVVFATState* s) int l1 = strlen(mapping->path); int l2 = strlen(old_path); int diff = l1 - l2; - a_direntry* direntry = array_get(&(s->directory), + direntry_t* direntry = array_get(&(s->directory), mapping->info.dir.first_dir_index); uint32_t c = mapping->begin; int i = 0; @@ -2368,10 +2368,10 @@ static int handle_renames_and_mkdirs(BDRVVVFATState* s) /* recurse */ while (!fat_eof(s, c)) { do { - a_direntry* d = direntry + i; + direntry_t* d = direntry + i; if (is_file(d) || (is_directory(d) && !is_dot(d))) { - a_mapping* m = find_mapping_for_cluster(s, + mapping_t* m = find_mapping_for_cluster(s, begin_of_direntry(d)); int l = strlen(m->path); char* new_path = qemu_malloc(l + diff + 1); @@ -2394,7 +2394,7 @@ static int handle_renames_and_mkdirs(BDRVVVFATState* s) array_remove(&(s->commits), i); continue; } else if (commit->action == ACTION_MKDIR) { - a_mapping* mapping; + mapping_t* mapping; int j, parent_path_len; #ifdef __MINGW32__ @@ -2422,7 +2422,7 @@ static int handle_renames_and_mkdirs(BDRVVVFATState* s) parent_path_len = strlen(commit->path) - strlen(get_basename(commit->path)) - 1; for (j = 0; j < s->mapping.next; j++) { - a_mapping* m = array_get(&(s->mapping), j); + mapping_t* m = array_get(&(s->mapping), j); if (m->first_mapping_index < 0 && m != mapping && !strncmp(m->path, mapping->path, parent_path_len) && strlen(m->path) == parent_path_len) @@ -2450,17 +2450,17 @@ static int handle_commits(BDRVVVFATState* s) vvfat_close_current_file(s); for (i = 0; !fail && i < s->commits.next; i++) { - a_commit* commit = array_get(&(s->commits), i); + commit_t* commit = array_get(&(s->commits), i); switch(commit->action) { case ACTION_RENAME: case ACTION_MKDIR: assert(0); fail = -2; break; case ACTION_WRITEOUT: { - a_direntry* entry = array_get(&(s->directory), + direntry_t* entry = array_get(&(s->directory), commit->param.writeout.dir_index); uint32_t begin = begin_of_direntry(entry); - a_mapping* mapping = find_mapping_for_cluster(s, begin); + mapping_t* mapping = find_mapping_for_cluster(s, begin); assert(mapping); assert(mapping->begin == begin); @@ -2474,8 +2474,8 @@ static int handle_commits(BDRVVVFATState* s) } case ACTION_NEW_FILE: { int begin = commit->param.new_file.first_cluster; - a_mapping* mapping = find_mapping_for_cluster(s, begin); - a_direntry* entry; + mapping_t* mapping = find_mapping_for_cluster(s, begin); + direntry_t* entry; int i; /* find direntry */ @@ -2530,9 +2530,9 @@ static int handle_deletes(BDRVVVFATState* s) deleted = 0; for (i = 1; i < s->mapping.next; i++) { - a_mapping* mapping = array_get(&(s->mapping), i); + mapping_t* mapping = array_get(&(s->mapping), i); if (mapping->mode & MODE_DELETED) { - a_direntry* entry = array_get(&(s->directory), + direntry_t* entry = array_get(&(s->directory), mapping->dir_index); if (is_free(entry)) { @@ -2550,7 +2550,7 @@ static int handle_deletes(BDRVVVFATState* s) } for (j = 1; j < s->mapping.next; j++) { - a_mapping* m = array_get(&(s->mapping), j); + mapping_t* m = array_get(&(s->mapping), j); if (m->mode & MODE_DIRECTORY && m->info.dir.first_dir_index > first_dir_index && @@ -2666,7 +2666,7 @@ DLOG(checkpoint()); for (i = sector2cluster(s, sector_num); i <= sector2cluster(s, sector_num + nb_sectors - 1);) { - a_mapping* mapping = find_mapping_for_cluster(s, i); + mapping_t* mapping = find_mapping_for_cluster(s, i); if (mapping) { if (mapping->read_only) { fprintf(stderr, "Tried to write to write-protected file %s\n", @@ -2678,7 +2678,7 @@ DLOG(checkpoint()); int begin = cluster2sector(s, i); int end = begin + s->sectors_per_cluster, k; int dir_index; - const a_direntry* direntries; + const direntry_t* direntries; long_file_name lfn; lfn_init(&lfn); @@ -2689,7 +2689,7 @@ DLOG(checkpoint()); end = sector_num + nb_sectors; dir_index = mapping->dir_index + 0x10 * (begin - mapping->begin * s->sectors_per_cluster); - direntries = (a_direntry*)(buf + 0x200 * (begin - sector_num)); + direntries = (direntry_t*)(buf + 0x200 * (begin - sector_num)); for (k = 0; k < (end - begin) * 0x10; k++) { /* do not allow non-ASCII filenames */ @@ -2702,7 +2702,7 @@ DLOG(checkpoint()); (direntries[k].attributes & 1)) { if (memcmp(direntries + k, array_get(&(s->directory), dir_index + k), - sizeof(a_direntry))) { + sizeof(direntry_t))) { fprintf(stderr, "Warning: tried to write to write-protected file\n"); return -1; } @@ -2774,7 +2774,7 @@ static int enable_write_target(BDRVVVFATState *s) int size = sector2cluster(s, s->sector_count); s->used_clusters = calloc(size, 1); - array_init(&(s->commits), sizeof(a_commit)); + array_init(&(s->commits), sizeof(commit_t)); s->qcow_filename = qemu_malloc(1024); get_tmp_filename(s->qcow_filename, 1024); @@ -2833,15 +2833,15 @@ block_init(bdrv_vvfat_init); #ifdef DEBUG static void checkpoint(void) { - assert(((a_mapping*)array_get(&(vvv->mapping), 0))->end == 2); + assert(((mapping_t*)array_get(&(vvv->mapping), 0))->end == 2); check1(vvv); check2(vvv); assert(!vvv->current_mapping || vvv->current_fd || (vvv->current_mapping->mode & MODE_DIRECTORY)); #if 0 - if (((a_direntry*)vvv->directory.pointer)[1].attributes != 0xf) + if (((direntry_t*)vvv->directory.pointer)[1].attributes != 0xf) fprintf(stderr, "Nonono!\n"); - a_mapping* mapping; - a_direntry* direntry; + mapping_t* mapping; + direntry_t* direntry; assert(vvv->mapping.size >= vvv->mapping.item_size * vvv->mapping.next); assert(vvv->directory.size >= vvv->directory.item_size * vvv->directory.next); if (vvv->mapping.next<47) |