diff options
Diffstat (limited to 'disk/part_dos.c')
| -rw-r--r-- | disk/part_dos.c | 19 | 
1 files changed, 16 insertions, 3 deletions
| diff --git a/disk/part_dos.c b/disk/part_dos.c index 37087a6ac..ab984cddf 100644 --- a/disk/part_dos.c +++ b/disk/part_dos.c @@ -74,13 +74,26 @@ static void print_one_part(dos_partition_t *p, int ext_part_sector,  static int test_block_type(unsigned char *buffer)  { +	int slot; +	struct dos_partition *p; +  	if((buffer[DOS_PART_MAGIC_OFFSET + 0] != 0x55) ||  	    (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 || -	    strncmp((char *)&buffer[DOS_PBR32_FSTYPE_OFFSET],"FAT32",5)==0) { -		return DOS_PBR; /* is PBR */ +	p = (struct dos_partition *)&buffer[DOS_PART_TBL_OFFSET]; +	for (slot = 0; slot < 3; slot++) { +		if (p->boot_ind != 0 && p->boot_ind != 0x80) { +			if (!slot && +			    (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 */ +			} else { +				return -1; +			} +		}  	}  	return DOS_MBR;	    /* Is MBR */  } |