Fixing diskwrite bug
This commit is contained in:
parent
943641df74
commit
7a94090b55
|
|
@ -145,6 +145,7 @@ int create_file(char *path, fat_info *info, FILE *file){
|
||||||
verbose && printf("Failed to read from file %s, skippping\n", path);
|
verbose && printf("Failed to read from file %s, skippping\n", path);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
verbose && printf("Read %d bytes from ifile\n", ifsize);
|
||||||
//create file in root dir
|
//create file in root dir
|
||||||
file_t dirent = {0};
|
file_t dirent = {0};
|
||||||
int extoffset = 0;
|
int extoffset = 0;
|
||||||
|
|
@ -158,14 +159,16 @@ int create_file(char *path, fat_info *info, FILE *file){
|
||||||
dirent.size_bytes = ifsize;
|
dirent.size_bytes = ifsize;
|
||||||
verbose && printf("Writing %u sectors\n", ifsize/(info->bpb.bytes_per_sector * info->bpb.sectors_per_cluster) + 1);
|
verbose && printf("Writing %u sectors\n", ifsize/(info->bpb.bytes_per_sector * info->bpb.sectors_per_cluster) + 1);
|
||||||
uint32_t last_cluster = 0;
|
uint32_t last_cluster = 0;
|
||||||
for(int i = 0; i < ifsize/(info->bpb.bytes_per_sector * info->bpb.sectors_per_cluster) + 1; i++){
|
for(int i = 0; i <= ifsize/(info->bpb.bytes_per_sector * info->bpb.sectors_per_cluster); i++){
|
||||||
uint32_t cluster = find_free_cluster(info);
|
uint32_t cluster = find_free_cluster(info);
|
||||||
if(i == 0){
|
if(i == 0){
|
||||||
dirent.start_cluster_high = cluster >> 16;
|
dirent.start_cluster_high = cluster >> 16;
|
||||||
dirent.start_cluster_low = cluster & 0xFFFF;
|
dirent.start_cluster_low = cluster & 0xFFFF;
|
||||||
}
|
}
|
||||||
// printf("found free cluster\n");
|
// printf("found free cluster\n");
|
||||||
write_sector(file, (info->bpb.reserved_sectors + info->bpb.fat_count * info->bpb.sectors_per_fat) + cluster * info->bpb.sectors_per_cluster, info->bpb.sectors_per_cluster, ifile_data);
|
write_sector(file, (info->bpb.reserved_sectors + info->bpb.fat_count * info->bpb.sectors_per_fat) + cluster * info->bpb.sectors_per_cluster, info->bpb.sectors_per_cluster, ifile_data + (info->bpb.bytes_per_sector * info->bpb.sectors_per_cluster) * i);
|
||||||
|
printf("cluster %d @ %p\n", i, ifile_data + (info->bpb.bytes_per_sector * info->bpb.sectors_per_fat * info->bpb.sectors_per_cluster) * i);
|
||||||
|
|
||||||
verbose && printf("wrote to sector %x %x sectors of data from buffer\n", (info->bpb.reserved_sectors + info->bpb.fat_count * info->bpb.sectors_per_fat) + cluster * info->bpb.sectors_per_cluster, info->bpb.sectors_per_cluster);
|
verbose && printf("wrote to sector %x %x sectors of data from buffer\n", (info->bpb.reserved_sectors + info->bpb.fat_count * info->bpb.sectors_per_fat) + cluster * info->bpb.sectors_per_cluster, info->bpb.sectors_per_cluster);
|
||||||
if(last_cluster != 0) write_cluster_value(info, cluster, last_cluster);
|
if(last_cluster != 0) write_cluster_value(info, cluster, last_cluster);
|
||||||
last_cluster = cluster;
|
last_cluster = cluster;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue