diff options
Diffstat (limited to 'fs/fat/fat.c')
| -rw-r--r-- | fs/fat/fat.c | 34 | 
1 files changed, 22 insertions, 12 deletions
| diff --git a/fs/fat/fat.c b/fs/fat/fat.c index 3824e1d3d..c068a842e 100644 --- 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); @@ -95,25 +96,34 @@ fat_register_device(block_dev_desc_t *dev_desc, int part_no)       defined(CONFIG_CMD_USB) || \       (defined(CONFIG_MMC) && defined(CONFIG_LPC2292)) || \       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;  } |