diff options
Diffstat (limited to 'fs/fat/fat.c')
| -rwxr-xr-x | fs/fat/fat.c | 42 | 
1 files changed, 23 insertions, 19 deletions
| diff --git a/fs/fat/fat.c b/fs/fat/fat.c index 300760836..21a00b80d 100755 --- a/fs/fat/fat.c +++ b/fs/fat/fat.c @@ -70,10 +70,11 @@ int  fat_register_device(block_dev_desc_t *dev_desc, int part_no)  {  	unsigned char buffer[SECTOR_SIZE]; +	disk_partition_t info;  	if (!dev_desc->block_read)  		return -1; -	cur_dev=dev_desc; +	cur_dev = dev_desc;  	/* check if we have a MBR (on floppies we have only a PBR) */  	if (dev_desc->block_read (dev_desc->dev, 0, 1, (ulong *) buffer) != 1) {  		printf ("** Can't read from device %d **\n", dev_desc->dev); @@ -84,36 +85,39 @@ fat_register_device(block_dev_desc_t *dev_desc, int part_no)  		/* no signature found */  		return -1;  	} -	if(!strncmp((char *)&buffer[DOS_FS_TYPE_OFFSET],"FAT",3)) { -		/* ok, we assume we are on a PBR only */ -		cur_part = 1; -		part_offset=0; -	} -	else {  #if ((CONFIG_COMMANDS & CFG_CMD_IDE)	|| \       (CONFIG_COMMANDS & CFG_CMD_SCSI)	|| \       (CONFIG_COMMANDS & CFG_CMD_USB)	|| \ -     (defined(CONFIG_MMC) && defined(CONFIG_LPC2292)) || \ +     (defined(CONFIG_MMC)) || \       defined(CONFIG_SYSTEMACE)          ) -		disk_partition_t info; -		if(!get_partition_info(dev_desc, part_no, &info)) { -			part_offset = info.start; -			cur_part = part_no; -		} -		else { -			printf ("** Partition %d not valid on device %d **\n",part_no,dev_desc->dev); -			return -1; -		} +	/* First we assume, there is a MBR */ +	if (!get_partition_info (dev_desc, part_no, &info)) { +		part_offset = info.start; +		cur_part = part_no; +	} else if (!strncmp((char *)&buffer[DOS_FS_TYPE_OFFSET], "FAT", 3)) { +		/* ok, we assume we are on a PBR only */ +		cur_part = 1; +		part_offset = 0; +	} else { +		printf ("** Partition %d not valid on device %d **\n", part_no, dev_desc->dev); +		return -1; +	}  #else +	if(!strncmp((char *)&buffer[DOS_FS_TYPE_OFFSET],"FAT",3)) { + 		/* ok, we assume we are on a PBR only */ + 		cur_part = 1; +		part_offset = 0; +		info.start = part_offset; +	} else {  		/* FIXME we need to determine the start block of the  		 * partition where the DOS FS resides. This can be done  		 * by using the get_partition_info routine. For this  		 * purpose the libpart must be included.  		 */ -		part_offset=32; +		part_offset = 32;  		cur_part = 1; -#endif  	} +#endif  	return 0;  } |