Fix fat32_get_prev_cluster and FAT code cleanup

This commit is contained in:
Christophe Grenier 2007-11-21 08:45:54 +01:00
parent 6b51c69a7b
commit 3a6099acd3
2 changed files with 10 additions and 31 deletions

View file

@ -491,7 +491,7 @@ unsigned int fat32_get_prev_cluster(disk_t *disk_car,const partition_t *partitio
offset_o=prev_cluster%(disk_car->sector_size/4); offset_o=prev_cluster%(disk_car->sector_size/4);
if((offset_o==0)||(prev_cluster==2)) if((offset_o==0)||(prev_cluster==2))
{ {
if(disk_car->read(disk_car,disk_car->sector_size, &buffer, hd_offset)!=0) if(disk_car->read(disk_car,disk_car->sector_size, buffer, hd_offset)!=0)
{ {
log_error("fat32_get_prev_cluster error\n"); return 0; log_error("fat32_get_prev_cluster error\n"); return 0;
} }

View file

@ -120,7 +120,7 @@ static int check_FAT_dir_entry(const unsigned char *entry, const unsigned int en
if(entry[0]==0) if(entry[0]==0)
{ {
for(i=0;i<0x20;i++) for(i=0;i<0x20;i++)
if(*(entry+i)!='\0') if(entry[i]!='\0')
return 2; return 2;
return 0; return 0;
} }
@ -132,7 +132,7 @@ static int check_FAT_dir_entry(const unsigned char *entry, const unsigned int en
return 1; return 1;
for(i=0;i<8+3;i++) for(i=0;i<8+3;i++)
{ {
const unsigned char car=*(entry+i); const unsigned char car=entry[i];
if((car>=0x06 && car<=0x1f)|| if((car>=0x06 && car<=0x1f)||
(car>=0x3a && car<=0x3f)|| (car>=0x3a && car<=0x3f)||
(car>='a' && car<='z')) (car>='a' && car<='z'))
@ -1621,39 +1621,19 @@ static upart_type_t fat_find_info(disk_t *disk_car,unsigned int*reserved, unsign
info_offset_t info_offset[0x400]; info_offset_t info_offset[0x400];
upart_type_t upart_type=UP_UNK; upart_type_t upart_type=UP_UNK;
fat_find_type(disk_car, partition,max_offset,p_fat12,p_fat16,p_fat32,verbose,dump_ind,interface,&nbr_offset,&info_offset[0], 0x400); fat_find_type(disk_car, partition,max_offset,p_fat12,p_fat16,p_fat32,verbose,dump_ind,interface,&nbr_offset,&info_offset[0], 0x400);
/*
info_offset[0].fat_type=32;
info_offset[0].offset=32;
info_offset[0].nbr=1;
info_offset[1].fat_type=32;
info_offset[1].offset=40;
info_offset[1].nbr=921;
info_offset[2].fat_type=32;
info_offset[2].offset=565;
info_offset[2].nbr=1;
info_offset[3].fat_type=32;
info_offset[3].offset=3064;
info_offset[3].nbr=921;
info_offset[4].fat_type=32;
info_offset[4].offset=3589;
info_offset[4].nbr=1;
info_offset[5].fat_type=32;
info_offset[5].offset=35190;
info_offset[5].nbr=1;
nbr_offset=6;
*/
for(i=0;i<nbr_offset;i++) for(i=0;i<nbr_offset;i++)
{ {
const uint64_t end=partition->part_offset+(uint64_t)info_offset[i].offset*disk_car->sector_size;
log_info("FAT%u at %lu(%u/%u/%u), nbr=%u\n",info_offset[i].fat_type,info_offset[i].offset, log_info("FAT%u at %lu(%u/%u/%u), nbr=%u\n",info_offset[i].fat_type,info_offset[i].offset,
offset2cylinder(disk_car,partition->part_offset+(uint64_t)info_offset[i].offset*disk_car->sector_size), offset2cylinder(disk_car, end),
offset2head(disk_car,partition->part_offset+(uint64_t)info_offset[i].offset*disk_car->sector_size), offset2head(disk_car,end),
offset2sector(disk_car,partition->part_offset+(uint64_t)info_offset[i].offset*disk_car->sector_size), offset2sector(disk_car,end),
info_offset[i].nbr); info_offset[i].nbr);
#ifdef HAVE_NCURSES #ifdef HAVE_NCURSES
if(dump_ind>0 && interface>0) if(dump_ind>0 && interface>0)
{ {
unsigned char *buffer=MALLOC(disk_car->sector_size); unsigned char *buffer=MALLOC(disk_car->sector_size);
if(disk_car->read(disk_car,disk_car->sector_size, &buffer, partition->part_offset+(uint64_t)info_offset[i].offset*disk_car->sector_size)==0) if(disk_car->read(disk_car,disk_car->sector_size, &buffer, end)==0)
{ {
dump_ncurses(buffer,disk_car->sector_size); dump_ncurses(buffer,disk_car->sector_size);
} }
@ -1933,7 +1913,7 @@ static int find_cluster_size_aux(const sector_cluster_t *sector_cluster, const u
{ {
for(j=i+1;j<nbr_sector_cluster;j++) for(j=i+1;j<nbr_sector_cluster;j++)
{ {
if(sector_cluster[j].cluster>sector_cluster[i].cluster) if(sector_cluster[j].cluster > sector_cluster[i].cluster)
{ {
unsigned int cluster_size_tmp=(sector_cluster[j].sector-sector_cluster[i].sector)/(sector_cluster[j].cluster-sector_cluster[i].cluster); unsigned int cluster_size_tmp=(sector_cluster[j].sector-sector_cluster[i].sector)/(sector_cluster[j].cluster-sector_cluster[i].cluster);
switch(cluster_size_tmp) switch(cluster_size_tmp)
@ -1946,8 +1926,7 @@ static int find_cluster_size_aux(const sector_cluster_t *sector_cluster, const u
case 32: case 32:
case 64: case 64:
case 128: case 128:
/* FIXME BUG */ if(sector_cluster[i].sector > (uint64_t)(sector_cluster[i].cluster-2) * cluster_size_tmp)
if(sector_cluster[i].sector > (uint64_t)(sector_cluster[i].cluster-2) * (*cluster_size))
{ {
unsigned int sol_cur; unsigned int sol_cur;
unsigned int found=0; unsigned int found=0;