diff options
| -rw-r--r-- | disk/part_dos.c | 4 | ||||
| -rw-r--r-- | disk/part_dos.h | 3 | ||||
| -rw-r--r-- | fs/fat/fat.c | 7 | 
3 files changed, 10 insertions, 4 deletions
| diff --git a/disk/part_dos.c b/disk/part_dos.c index 887b75ec8..2de1bb83b 100644 --- a/disk/part_dos.c +++ b/disk/part_dos.c @@ -77,8 +77,10 @@ static int test_block_type(unsigned char *buffer)  	    (buffer[DOS_PART_MAGIC_OFFSET + 1] != 0xaa) ) {  		return (-1);  	} /* no DOS Signature at all */ -	if(strncmp((char *)&buffer[DOS_PBR_FSTYPE_OFFSET],"FAT",3)==0) +	if (strncmp((char *)&buffer[DOS_PBR_FSTYPE_OFFSET],"FAT",3)==0 || +	    strncmp((char *)&buffer[DOS_PBR32_FSTYPE_OFFSET],"FAT32",5)==0) {  		return DOS_PBR; /* is PBR */ +	}  	return DOS_MBR;	    /* Is MBR */  } diff --git a/disk/part_dos.h b/disk/part_dos.h index ac93f20b3..195a32cb3 100644 --- a/disk/part_dos.h +++ b/disk/part_dos.h @@ -28,13 +28,14 @@  #ifdef CONFIG_ISO_PARTITION  /* Make the buffers bigger if ISO partition support is enabled -- CD-ROMS     have 2048 byte blocks */ -#define DEFAULT_SECTOR_SIZE   2048 +#define DEFAULT_SECTOR_SIZE	2048  #else  #define DEFAULT_SECTOR_SIZE	512  #endif  #define DOS_PART_TBL_OFFSET	0x1be  #define DOS_PART_MAGIC_OFFSET	0x1fe  #define DOS_PBR_FSTYPE_OFFSET	0x36 +#define DOS_PBR32_FSTYPE_OFFSET	0x52  #define DOS_PBR_MEDIA_TYPE_OFFSET	0x15  #define DOS_MBR	0  #define DOS_PBR	1 diff --git a/fs/fat/fat.c b/fs/fat/fat.c index 6b3a2742e..5b9ec2a4a 100644 --- a/fs/fat/fat.c +++ b/fs/fat/fat.c @@ -50,6 +50,7 @@ static int cur_part = 1;  #define DOS_PART_TBL_OFFSET	0x1be  #define DOS_PART_MAGIC_OFFSET	0x1fe  #define DOS_FS_TYPE_OFFSET	0x36 +#define DOS_FS32_TYPE_OFFSET	0x52  int disk_read (__u32 startblock, __u32 getsize, __u8 * bufptr)  { @@ -94,7 +95,8 @@ fat_register_device(block_dev_desc_t *dev_desc, int part_no)  	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)) { +	} else if (strncmp((char *)&buffer[DOS_FS_TYPE_OFFSET], "FAT", 3)==0 || +		   strncmp((char *)&buffer[DOS_FS32_TYPE_OFFSET],"FAT32",5)==0) {  		/* ok, we assume we are on a PBR only */  		cur_part = 1;  		part_offset = 0; @@ -105,7 +107,8 @@ fat_register_device(block_dev_desc_t *dev_desc, int part_no)  	}  #else -	if (!strncmp((char *)&buffer[DOS_FS_TYPE_OFFSET],"FAT",3)) { +	if ((strncmp((char *)&buffer[DOS_FS_TYPE_OFFSET], "FAT", 3) == 0) || +	    (strncmp((char *)&buffer[DOS_FS32_TYPE_OFFSET], "FAT32", 5) == 0)) {  		/* ok, we assume we are on a PBR only */  		cur_part = 1;  		part_offset = 0; |