if ((len & 3) && ((len > 4) || (b_offset == 0))) { 
if (len & 3) { 
static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data){	struct tg3 *tp = netdev_priv(dev);	int ret;	u32 offset, len, b_offset, odd_len, start, end;	u8 *buf;	if (eeprom->magic != TG3_EEPROM_MAGIC)		return -EINVAL;	offset = eeprom->offset;	len = eeprom->len;	if ((b_offset = (offset & 3))) {		/* adjustments to start on required 4 byte boundary */		ret = tg3_nvram_read(tp, offset-b_offset, &start);		if (ret)			return ret;		start = cpu_to_le32(start);		len += b_offset;		offset &= ~3;	}	odd_len = 0;	if ((len & 3) && ((len > 4) || (b_offset == 0))) {		/* adjustments to end on required 4 byte boundary */		odd_len = 1;		len = (len + 3) & ~3;		ret = tg3_nvram_read(tp, offset+len-4, &end);		if (ret)			return ret;		end = cpu_to_le32(end);	}	buf = data;	if (b_offset || odd_len) {		buf = kmalloc(len, GFP_KERNEL);		if (buf == 0)			return -ENOMEM;		if (b_offset)			memcpy(buf, &start, 4);		if (odd_len)			memcpy(buf+len-4, &end, 4);		memcpy(buf + b_offset, data, eeprom->len);	}	ret = tg3_nvram_write_block(tp, offset, len, buf);	if (buf != data)		kfree(buf);	return ret;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/1c8594b48b00a98d12477355e944e165a5f64cd5/tg3.c/buggy/drivers/net/tg3.c