 if (SYS_IND(p) == 0) continue; 
parse_extended(struct parsed_partitions *state, struct block_device *bdev,			u32 first_sector, u32 first_size){	struct partition *p;	Sector sect;	unsigned char *data;	u32 this_sector, this_size;	int sector_size = bdev_hardsect_size(bdev) / 512;	int loopct = 0;		/* number of links followed				   without finding a data partition */	int i;	this_sector = first_sector;	this_size = first_size;	while (1) {		if (++loopct > 100)			return;		if (state->next == state->limit)			return;		data = read_dev_sector(bdev, this_sector, &sect);		if (!data)			return;		if (!msdos_magic_present(data + 510))			goto done; 		p = (struct partition *) (data + 0x1be);		/*		 * Usually, the first entry is the real data partition,		 * the 2nd entry is the next extended partition, or empty,		 * and the 3rd and 4th entries are unused.		 * However, DRDOS sometimes has the extended partition as		 * the first entry (when the data partition is empty),		 * and OS/2 seems to use all four entries.		 */		/* 		 * First process the data partition(s)		 */		for (i=0; i<4; i++, p++) {			u32 offs, size, next;			if (SYS_IND(p) == 0)				continue;			if (!NR_SECTS(p) || is_extended_partition(p))				continue;			/* Check the 3rd and 4th entries -			   these sometimes contain random garbage */			offs = START_SECT(p)*sector_size;			size = NR_SECTS(p)*sector_size;			next = this_sector + offs;			if (i >= 2) {				if (offs + size > this_size)					continue;				if (next < first_sector)					continue;				if (next + size > first_sector + first_size)					continue;			}			put_partition(state, state->next, next, size);			if (SYS_IND(p) == LINUX_RAID_PARTITION)				state->parts[state->next].flags = 1;			loopct = 0;			if (++state->next == state->limit)				goto done;		}		/*		 * Next, process the (first) extended partition, if present.		 * (So far, there seems to be no reason to make		 *  parse_extended()  recursive and allow a tree		 *  of extended partitions.)		 * It should be a link to the next logical partition.		 */		p -= 4;		for (i=0; i<4; i++, p++)			if (NR_SECTS(p) && is_extended_partition(p))				break;		if (i == 4)			goto done;	 /* nothing left to do */		this_sector = first_sector + START_SECT(p) * sector_size;		this_size = NR_SECTS(p) * sector_size;		put_dev_sector(sect);	}done:	put_dev_sector(sect);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/b2411dd202e854d1f3be541135af8bb9872ea8b6/msdos.c/clean/fs/partitions/msdos.c